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 會用自己的啟動器),請按對應工具文檔打包。
修復完以后,再次運行就可以看到正常的啟動信息輸出了。