在JAVA中將class文件編譯成jar文件包,運行提示沒有主清單屬性


在JAVA中將class文件編譯成jar文件包,運行提示沒有主清單屬性

 

Maven 項目生成jar運行時提示“沒有主清單屬性”

新建了一個Maven的項目,mvn compilemvn 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 中加入如下代碼:
            [html]  view plain  copy
             
             print?在CODE上查看代碼片派生到我的代碼片
            1. <build>  
            2.     <plugins>  
            3.         <plugin>  
            4.             <artifactId>maven-assembly-plugin</artifactId>  
            5.             <configuration>  
            6.                 <appendAssemblyId>false</appendAssemblyId>  
            7.                 <descriptorRefs>  
            8.                     <descriptorRef>jar-with-dependencies</descriptorRef>  
            9.                 </descriptorRefs>  
            10.                 <archive>  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM