我相信对您遇到的错误有一个解释: jmods不能在运行时使用 。
这在这里解释:http :
//openjdk.java.net/jeps/261#Packaging : -JMOD-files:
JMOD文件可以在编译时和链接时使用,但不能在运行时使用。为了在运行时支持它们,通常要求我们准备好即时提取和链接本机代码库。
因此,我完成了一些简单的模块
hellofx:
module hellofx { requires javafx.controls; exports hellofx;}与
HelloFX从样品这里并下载JavaFX的11
jmods我的平台,在这里。我还从同一位置下载了JavaFX 11
SDK(罐)。
编译时间
在编译时,我们可以使用jmods:
javac -p /path-to/javafx-jmods-11/ -d mods/hellofx $(find src/hellofx -name "*.java")
或使用SDK:
javac -p /path-to/javafx-sdk-11/lib -d mods/hellofx $(find src/hellofx -name "*.java")
在这两种情况下,结果都与预期的完全相同:在编译时不需要本机库。
运行
现在我们要运行我们的小模块。
如OP所述,使用jmods运行:
java -p /path-to/javafx-jmods-11/:mods -m hellofx/hellofx.HelloFX
失败:
Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found, required by hellofx
但是使用SDK可以:
java -p /path-to/javafx-sdk-11/lib/:mods -m hellofx/hellofx.HelloFX
链接时间
如JEP-261所述,jmods在链接时也能正常工作,因此我们可以
jlink在编译时和运行时之间使用该工具。
您可以使用jlink工具将一组模块及其依赖项组装和优化到自定义运行时映像中。(来源)
因此,我们来做:
jlink -p /path-to/javafx-jmods-11/:mods --add-modules=hellofx --output links
这将生成一个90.7 MB的文件夹(在我的Mac上)。请注意,该
lib文件夹包含Java 11和JavaFX
11所需的所有本机库,以及一个名为的70.5 MB文件
modules。
播放时间(2)
我们终于可以做到:
links/bin/java -m hellofx/hellofx.HelloFX
那将起作用。
总之,如果只想使用jmods来编译和运行模块,则需要使用额外的步骤
jlink。否则,对于运行时,我们将需要JavaFX SDK。



