在JAVA中將class文件編譯成jar文件包,運行提示沒有主清單屬性
Maven 項目生成jar運行時提示“沒有主清單屬性”
新建了一個Maven的項目,mvn compile
和mvn package
后生成了jar文件,然后直接到target
目錄下去執行Java -jar xxx.jar
命令運行jar包時出現了“xxx.jar沒有主清單屬性”的錯誤提示。
根據我的經驗,肯定是沒有找到入口類(即main
函數所在的類),在pom.xml
里面加上入口類的配置就好了!第一次直接用maven來打包jar,記錄一下。
關於可執行程序(需要指定一個 main 類)打 jar 包就沒這么方便了,我們需要考慮以下幾個問題:
- 配置文件需要打進 jar 包;
- 需要指定 main 入口類;
- 所依賴的第三方庫也要打進 jar 包;
- 只有同時滿足以上三點,我們才可以直接使用 java -jar swiftonrsa-1.0.0.jar 命令成功執行該程序。
-
2.1 配置文件打包不需要額外關注
只要你項目所依賴的配置文件都按照 maven 規范放對位置(src/main/resources),那么打好的 jar 包就會把它們一起打包: - 但是這樣打好的 jar 包既沒有指定 main 入口類,也沒有將依賴包打進來,我們運行它:
- 提示"swiftonrsa-1.0.0.jar中沒有主清單屬性",我們查看打好 jar 包下 META-INF 目錄中的 MANIFEST.MF,其內容如下:
Manifest-Version: 1.0
Built-By: Defonds
Build-Jdk: 1.7.0_67
Created-By: Apache Maven 3.2.3
Archiver-Version: Plexus Archiver
確實沒有指出 main 入口類。
2.2 maven-assembly-plugin 插件
於是我們引入了 maven-assembly-plugin 插件,pom.xml 中加入如下代碼:
- 確實沒有指出 main 入口類。
2.2 maven-assembly-plugin 插件
於是我們引入了 maven-assembly-plugin 插件,pom.xml 中加入如下代碼:
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <appendAssemblyId>false</appendAssemblyId>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- <archive>
- 確實沒有指出 main 入口類。
- 提示"swiftonrsa-1.0.0.jar中沒有主清單屬性",我們查看打好 jar 包下 META-INF 目錄中的 MANIFEST.MF,其內容如下: