一、什麼是maven打包沒有主清單屬性
每一個Java程序在載入時都需要一個清單文件(manifest),用於描述打包文件的一些基本信息。而這個清單文件被命名為主清單文件(META-INF/MANIFEST.MF),是Java世界中非常重要的一個文件。一般情況下,當我們使用maven構建Java項目時,maven會默認自動生成這個主清單文件。但是有時候在打包時,會遇到沒有主清單屬性的問題。
二、為什麼會出現沒有主清單屬性的問題
通常,maven使用maven-jar-plugin這個插件來打包項目,生成Jar文件,maven-jar-plugin指定了META-INF/MANIFEST.MF這個清單文件的存放位置,但是當沒有自定義的配置不當或該文件被意外刪除時,maven就會生成不帶主清單屬性的jar包,也就是不存在”Manifest-Version”這一屬性。
三、如何解決沒有主清單屬性的問題
解決沒有主清單屬性的問題有以下幾種方式:
1、更新maven-jar-plugin插件的版本
由於maven-jar-plugin插件的版本不同,它的默認行為也不同。一些較新版本的插件,例如3.0.0以上的版本,會自動添加指定的清單屬性,當然,我們也可以在pom.xml文件中指定maven-jar-plugin插件的配置參數,如下所示:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
2、在maven的pom.xml中添加自定義的清單文件
手動創建一個MANIFEST.MF文件,文件內容需以”Manifest-Version: 1.0″開頭,然後手動添加到pom.xml文件中的配置中。如下所示:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<!-- 添加自己的清單屬性 -->
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<!-- 指定自定義的清單 -->
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
3、手動指定清單屬性
如果只想指定Manifest-Version這一屬性而不是添加實現信息,可以直接在maven-jar-plugin插件的配置中指定,如下所示:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifestEntries>
<Manifest-Version>1.0</Manifest-Version>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
四、總結
在maven進行Java項目打包時,遇到沒有主清單屬性的問題時,主要有三種解決方式,分別是更新maven-jar-plugin插件的版本、在maven的pom.xml中添加自定義的清單文件、手動指定清單屬性。通過本文的介紹,相信讀者已經對maven打包沒有主清單屬性的問題有了一個清晰的認識,可以靈活應對這個問題了。
原創文章,作者:LUAL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131663.html