dro*_*oid 4 java javafx intellij-idea maven jpackage
我\xe2\x80\x99m 在使用 Jpackage 时遇到一些问题,包括 Controlsfx。
\n我已经使用 Maven Central 的原型在 IntelliJ 和 JavaFX 中建立了一个项目。与 IntelliJ 中的 JavaFX 配合良好。我可以使用 Maven(来自 IntelliJ)将其打包,并使用 JPackage 来制作 exe 安装程序,这也可以正常工作。I\xe2\x80\x99m 使用此命令与 JPackage:
\njpackage --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\nRun Code Online (Sandbox Code Playgroud)\n现在我想合并 ControlsFX,因此我从 Maven 下载 ControlsFX .JAR: https: //mvnrepository.com/artifact/org.controlsfx/controlsfx/11.1.2IntelliJ \n在 IntelliJ 中,我将其添加为模块。好吧,我想在我的项目中使用 ControlsFX。
\n现在我想制作一个 exe 安装程序(如上面没有 ControlsFX 的那样),因此我将 ControlsFX 添加到我的 JPackage 命令中:
\njpackage --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\nRun Code Online (Sandbox Code Playgroud)\n运行命令时我得到这个:
\njava.lang.module.FindException:找不到模块controlsfx
\n我知道我的问题与我传递给 JPackage 的命令有关,但无法弄清楚是什么。
\n正如@Slaw 在下面的评论中提到的,您使用了错误的模块名称。您可以通过查看模块定义来确认 jar 的模块名称。这告诉您与 jpackage 一起使用的模块的名称,例如,如果是非模块 jar,org.controlsfx.controls则将打印:No module descriptor found. Derived automatic module.
jar --file=controlsfx.jar --describe-module
org.controlsfx.controls@11.1.2 jar:file:///c:/dev/mods/controlsfx.jar!/module-info.class
... plus details of exports
Run Code Online (Sandbox Code Playgroud)
该jpackage命令将在内部使用jlink来构建包含列出的所有模块的运行时映像:
jpackage --input myinput --add-modules javafx.controls,org.controlsfx.controls --module-path c:\xyz...\javafx-jmods-NN --module-path c:\abc...\controlsfx.jar --dest myoutput {otherargs}
Run Code Online (Sandbox Code Playgroud)
安装后,您可以使用以下命令检查已安装的运行时中包含哪些模块:
C:\Program Files\XYZ\runtime\bin\java --list-modules
...
javafx.controls@somever
...
org.controlsfx.controls@somever
Run Code Online (Sandbox Code Playgroud)
jpackage或者,您可以通过将 jar 复制到目录下某处的目标发布结构中来使用 jar(模块或非模块)--input。然后它将作为类路径 jar 依赖项(在发布目录内)而不是作为模块依赖项(在运行时映像内,如上所述)被选取。
您可以通过查看生成的文件来检查是否将 jar 添加为类路径依赖项{launcher}.cfg,它应该包含一行:
app.classpath=$APPDIR\whateverplaceunder--input.dir\controlsfx.jar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |