前言
记录一下我遇到的坑,该问题困扰了我很久,最后终于得到解决。网上关于JavaFx打包的教程并不算多,因此我打算发出来,希望能帮助更多的人。
需求
使用JavaFx开发的桌面程序能够打包到win、mac等多端,实现跨平台。不依赖jdk、jre等环境也能正常运行。
现在的JavaFx是模块化开发,但也因此会延伸出一个问题。 那就是引用第三方依赖时如果第三方依赖不是模块化的,那可能会遇到无法使用jlink打包的问题。
正文
我们使用jpackage、和maven打包插件来进行打包。
1.修改pom文件
<finalName>libs/app</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>libs/</classpathPrefix>
<mainClass>你的main入口</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/libs
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
然后直接使用maven package打包
2.开始Jpackage打包
使用maven打包后会在target文件夹生成libs目录,里面应该是相关的依赖。
然后这时我们打开终端进入到target目录,输入jpackage打包命令。
jpackage -i libs -n AppName --main-jar app.jar
等待命令执行完毕,打包完毕,最后会生成可执行程序,完结撒花。
关于更多的jpackage命令可自行搜索,可以指定icon、安装方式等,本文章不多赘述。