1. 程式人生 > >maven生成可以直接執行的jar(包括依賴和mainclass)

maven生成可以直接執行的jar(包括依賴和mainclass)

轉:http://blog.csdn.NET/xiao__gui/article/details/47341385

Maven可以使用mvn package指令對專案進行打包,如果使用Java -jar xxx.jar執行執行jar檔案,會出現"no main manifest attribute, in xxx.jar"(沒有設定Main-Class)、ClassNotFoundException(找不到依賴包)等錯誤。

要想jar包能直接通過Java -jar xxx.jar執行,需要滿足:

1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,這樣才能確定程式的入口在哪裡;

2、要能載入到依賴包。

使用Maven有以下幾種方法可以生成能直接執行的jar包,可以根據需要選擇一種合適的方法。

方法一:使用maven-jar-plugin和maven-dependency-plugin外掛打包

在pom.xml中配置:

  1. <build>
  2.     <plugins>
  3.         <plugin>
  4.             <groupId>org.apache.maven.plugins</groupId>
  5.             <artifactId>
    maven-jar-plugin</artifactId>
  6.             <version>2.6</version>
  7.             <configuration>
  8.                 <archive>
  9.                     <manifest>
  10.                         <addClasspath>true</addClasspath>
  11.                         <classpathPrefix
    >lib/</classpathPrefix>
  12.                         <mainClass>com.xxg.Main</mainClass>
  13.                     </manifest>
  14.                 </archive>
  15.             </configuration>
  16.         </plugin>
  17.         <plugin>
  18.             <groupId>org.apache.maven.plugins</groupId>
  19.             <artifactId>maven-dependency-plugin</artifactId>
  20.             <version>2.10</version>
  21.             <executions>
  22.                 <execution>
  23.                     <id>copy-dependencies</id>
  24.                     <phase>package</phase>
  25.                     <goals>
  26.                         <goal>copy-dependencies</goal>
  27.                     </goals>
  28.                     <configuration>
  29.                         <outputDirectory>${project.build.directory}/lib</outputDirectory>
  30.                     </configuration>
  31.                 </execution>
  32.             </executions>
  33.         </plugin>
  34.     </plugins>
  35. </build>

maven-jar-plugin用於生成META-INF/MANIFEST.MF檔案的部分內容,<mainClass>com.xxg.Main</mainClass>指定MANIFEST.MF中的Main-Class,<addClasspath>true</addClasspath>會在MANIFEST.MF加上Class-Path項並配置依賴包,<classpathPrefix>lib/</classpathPrefix>指定依賴包所在目錄。

例如下面是一個通過maven-jar-plugin外掛生成的MANIFEST.MF檔案片段:

  1. Class-Path: lib/commons-logging-1.2.jar lib/commons-io-2.4.jar  
  2. Main-Class: com.xxg.Main  

只是生成MANIFEST.MF檔案還不夠,maven-dependency-plugin外掛用於將依賴包拷貝到<outputDirectory>${project.build.directory}/lib</outputDirectory>指定的位置,即lib目錄下。

配置完成後,通過mvn package指令打包,會在target目錄下生成jar包,並將依賴包拷貝到target/lib目錄下,目錄結構如下:

指定了Main-Class,有了依賴包,那麼就可以直接通過java -jar xxx.jar執行jar包。

這種方式生成jar包有個缺點,就是生成的jar包太多不便於管理,下面兩種方式只生成一個jar檔案,包含專案本身的程式碼、資源以及所有的依賴包

方法二:使用maven-assembly-plugin外掛打包

在pom.xml中配置:

  1. <build>
  2.     <plugins>
  3.         <plugin>
  4.             <groupId>org.apache.maven.plugins</groupId>
  5.             <artifactId>maven-assembly-plugin</artifactId>
  6.             <version>2.5.5</version>
  7.             <configuration>
  8.                 <archive>
  9.                     <manifest>
  10.                         <mainClass>com.xxg.Main</mainClass>
  11.                     </manifest>
  12.                 </archive>
  13.                 <descriptorRefs>
  14.                     <descriptorRef>jar-with-dependencies</descriptorRef>
  15.                 </descriptorRefs>
  16.             </configuration>
  17.         </plugin>
  18.     </plugins>
  19. </build>

打包方式:
  1. mvn package assembly:single  

打包後會在target目錄下生成一個xxx-jar-with-dependencies.jar檔案,這個檔案不但包含了自己專案中的程式碼和資源,還包含了所有依賴包的內容。所以可以直接通過java -jar來執行。

此外還可以直接通過mvn package來打包,無需assembly:single,不過需要加上一些配置:
  1. <build>
  2.     <plugins>
  3.         <plugin>
  4. 相關推薦

    maven生成可以直接執行jar包括依賴mainclass

    轉:http://blog.csdn.NET/xiao__gui/article/details/47341385 Maven可以使用mvn package指令對專案進行打包,如果使用Java -jar xxx.jar執行執行jar檔案,會出現"no

    IDEA maven 打可執行jar包括依賴jar檔案所有配置檔案資原始檔

    目標 1. 將依賴第三方jar包都打進去  2. 將工程java 目錄下所有資料夾和配置檔案,包括資原始檔都打入jar包,根據目錄來          3. 打出jar檔案可直接執行 方法:採用 maven-assembly-plugin 環境:IDEA 14.1.5 JD

    maven打可執行jar包及依賴jar

    maven打可執行jar包,包含依賴jar包(分環境) 這篇文章打包介紹跟上一篇文章http://blog.csdn.net/u012204058/article/details/52514821

    maven 生成執行jar並使用shell指令碼執行

    建立maven專案,利用maven專案生成可執行jar,需要使用maven-assembly-plugin外掛來完成,pom.xml檔案配置如下 <?xml version="1.0" encoding="UTF-8"?> <projec

    在IDEA中用Maven生成執行jar

    將Spring Boot專案打包 使用 IDEA 按兩次shift進入IDEA的查詢功能,查詢並開啟Maven Projects 點開Lifecycle,雙擊package即完成打包 可在/

    maven打可執行jar包及依賴jar

    maven打可執行jar包,包含依賴jar包 maven安裝本地jar包到倉庫: mvn install:install-file -DgroupId=com.alipay -DartifactId

    【Java】itext根據模板生成pdf包括圖片表格

    金額 res report als fields positions 創建模板 bst open() 1、導入需要的jar包:itext-asian-5.2.0.jar itextpdf-5.5.11.jar。 2、新建word文檔,創建模板,將文件另存為pdf,並用Ado

    Maven打包可執行jar 分離配置檔案lib

    類: classloader 產生的resourceAsStream只能載入classpath下的配置檔案,如果想載入其他目錄的檔案需要使用file的形式,maven專案src/main/resources/對應classpath,這個路徑下的檔案不打包,所以不能使用r

    請實現一個函式用來判斷字串是否表示數值包括整數小數。例如,字串"+100","5e2","-123","3.1416""-1E-16"都表示數值。

    題目描述 請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 /* 思路:需要滿足一下規則(正則表

    請實現一個函式用來判斷字串是否表示數值包括整數小數。例如,字串"+100","5e2","-123","3.1416""-1E-16"都表示數值。 但是"12e",&quo

    package com.java.jie; public class test2 { public static void main(String [] args) { } public boolean isNumeric(char[] str) {

    與數字相關轉換包括英文漢語拼音

    數字到英文描述的轉換 1.給定一個整數,列印該整數的對應的英文描述,例如輸入1234,輸出“One Thousand,Two Hundred Thirty Four” 解題思路: 例如在轉換19323984時,我們可以考慮分段處理,每三位轉換一次,

    1.5程式設計基礎之迴圈控制 9. 描述 計算非負整數 m 到 n包括m n 之間的所有奇數的

    描述計算非負整數m到n(包括m和n)之間的所有奇數的和,其中,m不大於n,且n不大於300.例如m = 3,n = 12,其和則為:3+ 5 + 7 + 9 + 11 = 35。輸入兩個數m和n,兩個數

    Java對map進行排序包括按鍵

    package com.xin.demo; import java.util.ArrayList; import java.util.Collections; import java.util.C

    正則判斷一個字串是否為數字包括整數小數

    判斷一個字串是否為數字(包括整數和小數)public class IsNumber { public static boolean isNumeric(String str) {

    微信公眾號開發 同時回覆使用者多條資訊包括圖片文字

    相信對於大多數的微信公眾號開發的初學者來說,由於微信提供的文件過於簡潔,所以這無疑是對我們的巨大考驗。 但是,苦心人,天不負。在強烈的“我能行”這一自我暗示下,經過在各大網站上的查詢、電子書籍類的讀閱,經過無數次的嘗試,終於能夠實現一次事件同時回覆使用者多條資訊的功能了。額

    小技巧——整個頁面變為純黑白顯示包括圖片文字

    ####廢話不多說,首先大家要知道有filter這麼一個css屬性 1、如果是單張圖片或單段文字變黑白的話只需在對應元素的css樣式中加如下程式碼即可: img,div{ -webkit-fil

    SpringMVC預設首頁設定包括靜態動態

    在SpringMVC中一些坑,我就分享一下正確的設定和自己掉的坑 配置靜態頁面預設首頁。 這個相對比較簡單,但是還是需要注意一些東西 web.xml裡面填寫如下 <welcome-file-list> <welcome-file&g

    【劍指Offer-字串】請實現一個函式用來判斷字串是否表示數值包括整數小數

    題目 請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示數值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。 輸

    利用MAVEN打包可執行jar包,包括依賴的第三方包

    看下專案pom.xml的配置,首先要配置maven-jar-plugin,把自己的程式碼編譯打包成jar檔案,然後配置maven-assembly-plugin,把整個專案打包成一個釋出包。 Xml程式碼  收藏程式碼 <build>       <pl

    maven專案依賴本地jar包時編譯生成執行jar包方法

    maven專案需要本地jar包時,在根目錄新建lib目錄,將jar包拷貝到lib目錄並且新增到build path此時直接打可執行jar包會出現編譯報錯、啟動時缺少jar包等問題解決方案:    1.增加編譯外掛, 解決Failed to execute goal org.a