scala-native 可以使用现有的 Java/Scala 库吗?
Posted
技术标签:
【中文标题】scala-native 可以使用现有的 Java/Scala 库吗?【英文标题】:Can scala-native use existing Java/Scala libraries? 【发布时间】:2016-06-30 18:07:44 【问题描述】:我一直无法理解打算由 scala-native 编译的项目是否可以:
-
使用 Java 库?如果是,它是否使 scala-native 成为 Java 和 Scala 的提前编译器?
使用 Scala 库(编译为 JVM 字节码)
我知道只有部分 Scala 标准库可用。是不是因为有部分实现使用了Java标准库? 万一它不能,这个缺点会不会让一个 [非平凡的] 项目几乎不可能使用单个代码库编译到 JVM 和本机?有没有这方面的计划?
【问题讨论】:
【参考方案1】:我远不是这里的专家,但我在 Reddit 上问了一个类似的问题,并收到了 scala-native 不不与 Java 库交互的答案(所以我认为它无法编译他们也是)。
它可以连接到本机 ('c') 库。
我不知道有什么改变的计划。
【讨论】:
有任何指向 Reddit 问题的链接吗?如果寻找更多信息,可以帮助读者跟进。 0.1版发布后是否有任何更新【参考方案2】:从scale-native.org开始,它应该支持“胖”jar文件,带有分类和NIR文件——例如scalaz has added support for scala-native:
发布 Scala Native 支持 sbt 的标准工作流程 包分发:
编译您的代码。生成一个包含所有类文件和 NIR 的 jar 文件。将 jar 发布到 sonatype、bintray 或任何其他第三方 托管服务。 jar 发布后,即可解决 通过 sbt 的标准包解析系统。
【讨论】:
这意味着您不能使用 Java JAR;仅当 Scala JAR 已被交叉编译为 Scala Native 并包含 NIR 文件时,您才能使用它们(您不能使用未专门交叉编译为 Scala Native 的 Scala JAR)【参考方案3】:可以想象,JVM 执行的 Java 库或 Scala 库可以通过 JNI 调用,类似于 C/C++ 通过 JNI 调用这些库。这样做的时机正好是 C/C++ 需要这样做的时候,这应该介于罕见(接近于零)和诅咒(可恶的绝对零)之间。
【讨论】:
以上是关于scala-native 可以使用现有的 Java/Scala 库吗?的主要内容,如果未能解决你的问题,请参考以下文章