2012-07-19 69 views
2

我试图从scala-class中创建一个Dll。我正在使用IntelliJ和SBT。我已经找到了一种使用ikvm转换器将.jar文件转换为Dll的方法。现在的问题是:当我使用SBT下的“package”创建一个.jar文件出我的.scala文件并尝试将它与ikvmc转换为一个Dll时,生成的库在C#中集成时为空...将Scala库转换为DLL(.NET)

例如,转换Jama-Library(用Java编写)工作正常,在那里转换Scama(用Scala编写)不起作用。

有没有办法将scala代码转换成d​​ll?有没有“Scala to Java”转换工具?

最好的问候, 克里斯托夫

+0

你是否也将scala运行时jar包含在转换中?请显示您的ikvmc命令行。 – 2012-07-19 07:57:02

+0

Scala编译为Java字节码,所以没有理由说明Scala本身会给IKVMC带来一些问题。当你编译Scala时,你会得到一个Java类。看起来问题在于,Scama API没有通过IKVM转换时可以从C#访问的可见性规则 – Edmondo1984 2012-07-19 07:58:17

+0

ikvmc -target:library jama-1.0.2.jar – user1537137 2012-07-19 08:06:06

回答

2

我没有.NET的知识,而是从SK-逻辑的和您的意见对问题判断:sbt package包括Scala的运行时库,因为它假定你是将您的项目导出为其他Scala项目中使用的库。

因此,您将需要创建一个包含运行时的“胖”jar。例如,在this blog中,您可以看到作者如何通过转换项目jar和运行时jar来创建完全自包含的可执行文件。

有不同的工具可以做到这一点与sbt。最容易的是sbt-assembly,但是最终会得到一个非常大的文件,因为它只是增加了整个运行时间。如果这是一个问题,您可能需要使用proguard plugin来过滤运行时间。有关此主题的更多信息,请参阅another StackOverflow entry

+2

不一定是一个脂肪罐,你可以同时处理多个罐子(这是推荐使用ikvmc的方法)。 – 2012-07-19 12:11:55