Gradle生成的示例项目执行Jar包报‘no main manifest attribute’错误
解决Gradle Application项目生成的Jar无主清单属性问题
问题原因
你配置的application.mainClass = "org.example.App"仅作用于gradlew run任务和tar/zip分发包的启动脚本,Gradle默认的jar任务不会自动将主类信息写入Jar的Manifest文件,所以直接用java -jar运行时会提示no main manifest attribute。
解决方案
方案1:修改默认Jar任务,添加主类清单属性
在你的构建脚本中添加以下配置,让jar任务生成的Jar包含主类信息:
tasks.named<Jar>("jar") { manifest { attributes["Main-Class"] = application.mainClass.get() } }
执行gradlew jar后,生成的app/build/libs/app.jar就会包含Main-Class属性。注意:这个Jar仅包含项目自身代码,运行时需要手动指定依赖类路径,比如:
java -cp app/build/libs/app.jar:依赖路径/* org.example.App
方案2:生成包含所有依赖的可执行Fat Jar
如果希望生成一个能直接运行、包含所有依赖的Jar,可以使用Shadow插件:
- 先在
plugins块中引入Shadow插件:
plugins { id("com.github.johnrengelman.shadow") version "8.1.1" application // 保留原有的application插件 }
- 执行
gradlew shadowJar,生成的Fat Jar位于app/build/libs/app-all.jar - 直接运行:
java -jar app/build/libs/app-all.jar
内容的提问来源于stack exchange,提问作者Christian Kelle
相关产品推荐
相关产品推荐

