我在使用Jpack时遇到了一些问题,包括Controlsfx。
我使用Maven Central的Archetype在IntelliJ中使用JavaFX设置了一个项目。在IntelliJ中与JavaFX一起工作很好。我可以将其与Maven(来自IntelliJ)打包并使用JPackage制作exe-install er,这也可以正常工作。我在JPackage中使用此命令:
jpackage --input C:\...\target --add-modules javafx.controls --module-path C:\...\openjfx-20.0.1_windows-x64_bin-jmods\javafx-jmods-20.0.1 --module-path --win-console --dest c:\outputs --main-jar tests-1.0-SNAPSHOT.jar --main-class tests.App
现在我想合并ControlsFX,所以我从Maven下载ControlsFX。JAR:https://mvnrepository.com/artifact/org.controlsfx/controlsfx/11.1.2IntelliJ在IntelliJ中,我将其添加为模块。好吧,我想在我的项目中使用ControlsFX。
现在我想制作一个exe-install er(就像上面没有ControlsFX一样),所以我将ControlsFX添加到我的JPackage命令中:
jpackage --input C:\...\target --add-modules javafx.controls,controlsfx --module-path C:\...\openjfx-20.0.1_windows-x64_bin-jmods\javafx-jmods-20.0.1 --module-path C:\..\controlsfx --win-console --dest c:\test --main-jar tests-1.0-SNAPSHOT.jar --main-class tests.App
运行命令时,我得到这个:
java. lang.module.FindException:找不到模块控件fx
我知道我的问题与我传递给JPackage的命令有关,但不知道是什么。
jpack
命令将在内部使用jlink
来构建包含所有列出的模块的运行时映像。为此,它必须有权访问模块定义控制fx. jmod
而不是jar。
如果您没有jmod文件,那么您可以将控制fx. jar复制到--input
目录下的目标发布结构中。然后它将作为类路径jar依赖项(在发布目录中)而不是模块依赖项(在运行时映像中)被选中。
您可以通过查看生成的project. cfg
来检查jar是否添加到类路径中,它应该包含一行:
app.classpath=$APPDIR\whateverplaceunder--input.dir\controlsfx.jar