(使用jdk14)
首先要知道,为了使用jlink
,你的主要jar包应该是一个模块。
怎么做? 假设你有一个maven
项目。你只需要在src/main/java
目录下添加module-info.java
文件,并确保你require
了你的应用所需的模块,同时export
包含主类的包。在大多数情况下,当缺少requires
时会出现编译时错误。请记住,非模块依赖项会成为自动模块。
你可以使用maven的copy-dependencies
来确保所有依赖项都被复制到target/lib
目录下,在运行mvn package
时一同打包。
下一步:jlink
由于jlink
maven插件仍处于alpha
阶段,你可以使用命令行方式。
注意:
jlink
将创建一个自包含的捆绑目录,其中包含
- 主应用程序模块
- 应用程序依赖项
- 需要的jdk模块
- 应用程序启动器(可选)
jlink
捆绑目标一次只能针对一个平台。默认情况下,它是当前平台。
javafx
运行时模块也是特定于平台的。但由于它们不是jdk的一部分,因此我们需要始终提供包含它们的模块路径。
javafx
运行时模块可以通过使用相应的目标平台分类器(win / linux / mac)从web下载或从maven repo下载。
jlink
还可以创建跨平台捆绑包。只需将目标平台模块包含在--module-path
中(例如,在Linux上:下载Windows jdk
/ javafx
并将其 dirs添加到module-path
中)。
jlink 命令
情况 1: 构建和目标 平台 相同
注意:除非使用 Maven(copy-dependencies)将所需的 JavaFX 依赖项复制到 lib/
下,否则需要提供 /path-to/javafx-mods
到您的 modulepath
。
jlink --launcher run=jdk14Example/com.example.javafx.app.Main \
--module-path ./lib:javafx-jdk14-example-1.0.0.jar:/path-to/javafx-mods \
--add-modules=jdk14Example --output app-bundle
案例2:构建和目标平台不同。
jlink --launcher run=jdk14Example/com.example.javafx.app.Main \
--module-path ./lib:javafx-jdk14-example-1.0.0.jar:/path-to/jdk-win/jmods:/path-to/javafx-mods-win \
--add-modules=jdk14Example --output app-bundle
结论:
在以上两种情况下,您将获得一个包含完整应用程序的目录,该应用程序可以在未安装java
/javafx
的工作站上运行。
app-bundle/bin/run
app-bundle/bin/run.bat
app-bundle/bin/run
.jar! /../lib
)解决这个问题,因为这对于依赖该技术的应用程序开发人员来说是很常见的。 - tresf