如何通过Gradle生成包含所有依赖的JavaFX可执行Jar包
解决方案
修复JavaFX依赖版本冲突
你当前配置存在版本冲突问题:javafx配置块指定了版本为11.0.2,但dependencies块中手动引入的JavaFX依赖版本为14,同时openjfx插件本身会自动引入对应版本的依赖,无需手动重复声明。
直接删除dependencies块中// here starts JavaFX注释下所有JavaFX相关的implementation声明即可。使用Shadow插件打包含全量依赖的可执行jar
JavaFX属于模块化依赖,使用原生jar任务打包容易出现依赖遗漏问题,替换为Shadow插件打包稳定性更高:
- 修改
plugins配置块,新增Shadow插件引入:
plugins { id 'java' id 'application' id 'org.openjfx.javafxplugin' version '0.0.8' id 'com.github.johnrengelman.shadow' version '7.1.2' }
- 删除你原有配置中的整个
jar {...}代码块,新增如下配置:
shadowJar { manifest { attributes 'Main-Class': 'newcare.home.Main_1' } mergeServiceFiles() exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA' } build.dependsOn shadowJar
- 执行打包命令
配置修改完成后,在项目根目录执行打包命令:
- Mac/Linux系统:
./gradlew shadowJar - Windows系统:
gradlew.bat shadowJar
打包完成后,进入build/libs目录,使用名称带-all后缀的jar包运行即可,命令为java -jar 包名-all.jar。
可选优化:如果运行时仍然报模块相关错误,可新增一个无继承的启动类绕开模块化检查,示例代码如下:
package newcare.home; public class Launcher { public static void main(String[] args) { Main_1.main(args); } }之后将
shadowJar配置中的Main-Class属性值修改为newcare.home.Launcher,重新打包即可。
内容的提问来源于stack exchange,提问作者Patrice Andala
相关产品推荐
相关产品推荐

