(使用jdk14)
首先,为了使用jlink
你的主 jar 应该是一个模块。
如何?考虑到你有一个maven
项目。您只需要包含module-info.java
在src/main/java
dir 中并确保您require
的应用程序需要的模块以及export
包含您的主类的包。在大多数情况下,如果缺少requires
. 请记住,非模块化依赖项成为自动模块。
您可以使用 mavencopy-dependencies
确保所有依赖项都target/lib
在mvn package
.
下一步:jlink
由于jlink
maven 插件还在alpha
,所以可以使用命令行。
笔记:
jlink
将创建一个自包含的包目录,其中包含
- 主应用模块
- 应用依赖
- jdk 所需模块
- 应用启动器(可选)
jlink
bundle 一次只针对一个平台。默认情况下,它是当前平台。
javafx
运行时模块也是平台特定的。但由于它们不是 jdk 的一部分,我们需要始终提供包含它们的模块路径。
javafx
运行时模块可以从 web 下载,也可以使用相应的目标平台(win/linux/mac)从 maven repo下载。classifier
jlink
还可以创建跨平台捆绑包。只需将目标平台模块包含到--module-path
(例如从 linux:下载 windows jdk
/javafx
并将其jmods
目录添加到module-path
)。
jlink 命令
案例一: 构建平台和目标平台相同
注意:/path-to/javafx-mods
需要提供给您,除非您在using maven (copy-dependencies)modulepath
下复制所需的 javafx deps 。lib/
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: 构建平台和目标平台不同
# Building from linux for windows
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
。
# if jlink targeted linux
app-bundle/bin/run
# if jlink targeted windows
app-bundle/bin/run.bat
# if jlink targeted mac
app-bundle/bin/run