我从OpenJFX项目下载了JavaFX Jmod文件,并将它们放在 G:\openjfx\javafx-jmods-11
目录中 . 我使用的是OpenJDK 11,它在_1761465中没有JavaFX jmod,即它没有附带JavaFX发行版 .
模块信息文件:
module gui{
requires javafx.graphics;
requires javafx.controls;
exports com.test;
}
我编译如下:
javac -p G:\openjfx\javafx-jmods-11 -d mods --module-source-path src
src\gui\com\test\*.java src\gui\module-info.java
编译成功 . 但我无法使用以下命令运行已编译的代码:
java -p G:\openjfx\javafx-jmods-11;mods -m gui/com.test.CreateGuiDemo
但我得到以下错误:
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.graphics not found, required by gui
1 回答
我相信您所面临的错误有一个解释: jmods can't be used at run time .
这在这里解释:http://openjdk.java.net/jeps/261#Packaging:-JMOD-files:
并且归功于answer .
所以我做了一些简单的模块
hellofx
:使用来自here的
HelloFX
示例,并从here下载了用于我的平台的JavaFX 11的jmods . 我还从同一个位置下载了JavaFX 11 SDK(jars) .Compile time
在编译时,我们可以使用jmods:
或者使用SDK:
在这两种情况下,结果都与预期完全相同:在编译期间不需要本机库 .
Run time
现在我们要运行我们的小模块 .
正如OP所述,使用jmods运行:
失败了:
但使用SDK,有效:
Link time
正如JEP-261所述,jmods在链接时也能正常工作,因此我们可以在编译时和运行时之间使用
jlink
工具 .我们这样做:
这将生成一个90.7 MB的文件夹(在我的Mac上) . 请注意,
lib
文件夹包含来自Java 11和JavaFX 11的所有必需本机库,以及名为modules
的70.5 MB文件 .Run time (2)
我们终于可以做到:
这将有效 .
总之,如果我们只想使用jmods来编译和运行我们的模块,我们需要使用
jlink
进行额外的步骤 . 否则,对于运行时,我们需要JavaFX SDK .