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
):
xml
<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):
groovy
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 会用自己的启动器),请按对应工具文档打包。
修复完以后,再次运行就可以看到正常的启动信息输出了。
