java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案
xxx.jar
中没有主清单属性 (no main manifest attribute
)解决方案
java -jar xxx.jar
提示xxx.jar
中没有主清单属性报错解决方案
这个错通常出现在你用 java -jar xxx.jar
启动,但 JAR 的 META-INF/MANIFEST.MF
里没有 Main-Class
条目(或没按可执行 JAR 的方式打包)。快速检查 + 常见解决方案如下:
用构建工具打出可执行 JAR
如果你用 Maven 或 Gradle,推荐在构建阶段就写好 Main-Class
并(如果需要)生成 fat/uber-jar。
Maven (maven-jar-plugin
):
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.qwen.QwenChatApplication</mainClass><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
生成包含依赖的可执行 jar 用 maven-shade-plugin
或 spring-boot-maven-plugin
(Spring Boot 项目)。
Gradle(普通 jar):
jar {manifest {attributes 'Main-Class': 'com.example.Main'}
}
如果要包含依赖(fat jar),用 shadow
插件或 application
插件的打包方式。
常见坑 & 提示
Main-Class
值必须是完全限定类名(包含包名),且该类要有public static void main(String[] args)
。MANIFEST.MF
文件末尾必须以换行结尾,否则属性可能不会生效。- 如果这个 jar 只是一个 library(不是可执行),它本来就可能没有
Main-Class
,这时应通过-cp
指定主类或使用项目提供的启动脚本。 - Spring Boot、jar-with-dependencies、shade 等工具会改变启动方式(Spring Boot 会用自己的启动器),请按对应工具文档打包。
修复完以后,再次运行就可以看到正常的启动信息输出了。