首页 > 解决方案 > 如何在 SBT 中创建拼图模块?

问题描述

我想使用 jlink 从 Scala 源代码为所有平台(darwin、linux、windows)创建自包含的应用程序包。似乎jlink只适用于新的(相对)拼图模块 - 所以我需要将我的代码打包为一个模块。在 Java 世界中,通过将特殊的 module-info.java 文件放入将成为模块的包中似乎很容易实现。

我试图跟随直觉,只是将这个 module-info.java 放入src/main/java/my.package.name/module-info.java. 虽然这不起作用。似乎scalac正在尝试像通常的 Java 文件一样读取 module-info.java(事实并非如此),因此出现错误

module-info.java:1:8: illegal start of type declaration
[error] module my.package.name {
[error]        ^

我需要做什么才能将我的 Scala 代码打包为一个模块?

打开 JDK:11 Scala:2.12.4 SBT:1.1.6

标签: javascalasbtjava-11module-info

解决方案


一般来说,scala 似乎并不完全支持 Java9+,至少它们的兼容性说明是这样的。

从 Scala 2.12.6 和 2.11.12 开始,JDK 9+ 支持不完整。值得注意的是,scalac 不会强制执行 Java 平台模块系统的限制,这意味着类型检查的代码可能会在运行时引发链接错误。Scala 2.13.x 将为此提供基本支持,但可能仅在基于 Java 11 构建的 nightlies 中提供。

您可以关注JDK 9+Java 11 测试的支持功能以获取进一步的更新。


推荐阅读