【问题标题】:Converting a Scala library to a DLL (.NET)将 Scala 库转换为 DLL (.NET)
【发布时间】:2012-07-18 08:47:32
【问题描述】:

我正在尝试从 Scala 类中创建一个 Dll。我将 IntelliJ 与 SBT 一起使用。我已经找到了一种使用 ikvm-converter 将 .jar 文件转换为 Dll 的方法。现在的问题:当我在 SBT 下使用“包”从我的 .scala 文件中创建一个 .jar 文件并尝试使用 ikvmc 将其转换为 Dll 时,结果库在集成到 C# 时为空...

例如,转换 Jama-Library(用 Java 编写)可以正常工作,而转换 Scama(用 Scala 编写)则不起作用。

有没有办法将 scala 代码转换为 dll?有没有“Scala to Java”的转换工具?

最好的问候, 克里斯托夫

【问题讨论】:

  • 您是否也将您的 scala 运行时 jar 包含到您的转换中?请显示您的 ikvmc 命令行。
  • Scala 编译为 Java 字节码,因此 Scala 本身没有理由对 IKVMC 造成一些问题。当你编译 Scala 时,你会得到一个 Java 类。看起来问题是 Scama API 在通过 IKVM 转换时没有正确的可见性规则,无法从 C# 访问
  • ikvmc -target:library jama-1.0.2.jar
  • ikvmc -target:library scama_2.9.0-1.0.jar 这给了我 .dll 文件。转换诈骗库时,我收到警告,转换 Jama 时我没有收到警告。
  • 尝试将此 jar 与所有依赖项一起转换。

标签: java scala dll ikvm


【解决方案1】:

我不了解 .NET,但从 SK-logic 和您的 cmets 来看问题:sbt package 是否包含 Scala 运行时库,因为它假设您要导出将您的项目作为库用于其他 Scala 项目。

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

有不同的工具可以用 sbt 做到这一点。最简单的是sbt-assembly,但你最终会得到一个非常大的文件,因为它只是添加了整个运行时。如果这是一个问题,您可能希望使用 proguard plugin 过滤运行时。有关此主题的更多信息,请访问 another StackOverflow entry

【讨论】:

  • 不一定是一个fat jar,可以同时处理多个jar(也是推荐使用ikvmc的方式)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多