1. 程式人生 > >java中的Maven專案的兩種打包方法

java中的Maven專案的兩種打包方法

個人覺得 第二種方法更好。

基於Maven構建的專案的方法:

一:

將專案所支援的所有類庫打在一個包中,而不是隻將專案編譯打包到一個jar中。這樣便可以直接拷貝一個jar去執行了。

Xml程式碼  收藏程式碼
  1. <plugin>  
  2.                 <artifactId>maven-assembly-plugin</artifactId>  
  3.                 <configuration>  
  4.                     <appendAssemblyId>false</appendAssemblyId
    >  
  5.                     <descriptorRefs>  
  6.                         <descriptorRef>jar-with-dependencies</descriptorRef>  
  7.                     </descriptorRefs>  
  8.                     <archive>  
  9.                         <manifest>  
  10.                             <
    mainClass>com.ebay.montage.eventprocessor.collector.CodeRollOutEventDataCollector</mainClass>  
  11.                         </manifest>  
  12.                     </archive>  
  13.                 </configuration>  
  14.                 <executions>  
  15.                     <execution>  
  16.                         <id>make-assembly</id>  
  17.                         <phase>package</phase>  
  18.                         <goals>  
  19.                             <goal>assembly</goal>  
  20.                         </goals>  
  21.                     </execution>  
  22.                 </executions>  
  23.             </plugin>  

使用命令:

mvn assembly:assembly -DskipTests

這裡就會在target目錄下生成*.jar檔案,

直接執行jar檔案: Java -jar *.jar

備註:當然也可以使用mvn clean install -DskipTests 來構建生成jar包。

注意綠色部分,自行定義內容。

 在 maven 工程中,我們也可以很方便的打包成可執行的 jar 包。預設Maven生成的JAR包只包含了編譯生成的.class檔案和專案資原始檔,而要得到一個可以直接在命令列通過java命令執行的JAR檔案,還要滿足兩個條件:

  • JAR包中的/META-INF/MANIFEST.MF元資料檔案必須包含Main-Class資訊。
  • 專案所有的依賴都必須在Classpath中,其可以通過 MANIFEST.MF 指定或者隱式設定。
Xml程式碼  收藏程式碼
  1. <plugins>  
  2.           <plugin>  
  3.                 <groupId>org.apache.maven.plugins</groupId>  
  4.                 <artifactId>maven-jar-plugin</artifactId>  
  5.                 <configuration>  
  6.                     <archive>  
  7.                         <manifest>  
  8.                             <addClasspath>true</addClasspath>  
  9.                             <classpathPrefix>lib/</classpathPrefix>  
  10.                             <mainClass>com.ebay.montage.eventprocessor.collector.MySpace</mainClass>  
  11.                         </manifest>  
  12.                         <manifestEntries>  
  13.                             <Class-Path>.</Class-Path>  
  14.                         </manifestEntries>  
  15.                     </archive>  
  16.                     <finalName>eventprocessor</finalName>  
  17.                     <!-- <excludes>  
  18.                         <exclude>**/*.properties</exclude>  
  19.                         <exclude>**/*.xml</exclude>  
  20.                     </excludes> -->  
  21.                 </configuration>  
  22.             </plugin>  
  23. <plugin>  
  24.                 <groupId>org.apache.maven.plugins</groupId>  
  25.                 <artifactId>maven-dependency-plugin</artifactId>  
  26.                 <executions>  
  27.                     <execution>  
  28.                         <id>copy-dependencies</id>  
  29.                         <phase>prepare-package</phase>  
  30.                         <goals>  
  31.                             <goal>copy-dependencies</goal>  
  32.                         </goals>  
  33.                         <configuration>  
  34.                             <outputDirectory>${project.build.directory}/lib</outputDirectory>  
  35.                             <overWriteReleases>false</overWriteReleases>  
  36.                             <overWriteSnapshots>false</overWriteSnapshots>  
  37.                             <overWriteIfNewer>true</overWriteIfNewer>  
  38.                         </configuration>  
  39.                     </execution>  
  40.                 </executions>  
  41.             </plugin>  
  42.     </plugins>  

使用mvn clean install -DskipTests打jar 包。

這樣打好jar包後就可以使用:java -jar eventprocessor.jar Myspace, 

當然了前提是在Myspace中有一個main方法。這樣便可直接去執行Myspace中的main方法了。

但是如果要將jar包放到別的機器上去執行的話,需要將targe中的lib下的內容(上面命令中指定)也同樣拷貝過去,因為預設情況下:maven只是將專案編譯打包到一個jar中,而其它的類庫在上面手動的指定被放到了lib中,所以在執行的時候必須要引用才行


附:如果對Maven感興趣,如下文章的幾個功能有必要了解一下:關於 Apache Maven 您不知道的 5 件事

相關推薦

javaMaven專案打包方法

個人覺得 第二種方法更好。 基於Maven構建的專案的方法: 一: 將專案所支援的所有類庫打在一個包中,而不是隻將專案編譯打包到一個jar中。這樣便可以直接拷貝一個jar去執行了。 Xml程式碼   <plugin>              

Java檔案的遞迴查詢方法

最近,需要用寫小工具來進行大量的檔案讀寫操作,不可避免的用到檔案目錄的遞迴,下面有兩種方法,一種是方法遞迴,一種是NIO的遞迴。效率應該是後一種優先,因為第一種我在學習機上跑竟然溢位了。 第一種: File file = new File(path);

javaString的21使用方法

i++ als cas tolower star out clas oid index (構造函數必須new出來) * public String (char[] vaue) 將一個字符數組變成字符串(構造函數) *

Java動態代理的實現方法

AOP的攔截功能是由java中的動態代理來實現的。說白了,就是在目標類的基礎上增加切面邏輯,生成增強的目標類(該切面邏輯或者在目標類函式執行之前,或者目標類函式執行之後,或者在目標類函式丟擲異常時候執行。不同的切入時機對應不同的Interceptor的種類,如BeforeAd

JS函式的定義方法

定義函式 在JavaScript中,定義函式的方式如下: function abs(x) { if (x >= 0) { return x; } else {

JAVA 陣列的幾排序方法

1、陣列的氣泡排序 public void bubbleSort(int a[]) { int n = a.length; for (int i = 0; i < n - 1; i++) { for (int j = 0; j &

JAVAsuper的用法

http://www.cnblogs.com/rollenholt/articles/2033989.html 通過用static來定義方法或成員,為我們程式設計提供了某種便利,從某種程度上可以說它類似於C語言中的全域性函式和全域性變數。但是,並不是說有了這種便利,你便可以隨處使用,如果那樣的話,你

reactref的使用方法

ref一共有兩種使用方式 回撥函式形式(官方推薦) string形式 第一種 回撥函式形式 回撥函式形式一共有三種觸發方式 元件渲染後 元件解除安裝後 ref改變後 import React,{Component} from 'react'

java return 的常見的用法

一:return語句總是用在方法中,有兩個作用:     一個是返回方法指定型別的值(這個值總是確定的),      一個是結束方法的執行(僅僅一個return語句)。 二:例項1 -- 返回一個St

pysparkcombineByKey的理解方法

Spark 1.6 以前一直模模糊糊的,現在搞一下比較清楚 combineByKey(createCombiner, mergeValue, mergeCombiners, nu

java對LIst集合的排序方法(即sort的使用方法)

List集合的排序: java提供了兩種排序方式,分別是Collections.sort(List)和Collections.sort(List,Commparator),下面就這兩種方法的使用做詳細的說明: -Collections.sort(List); sort的引數是一

java面試題:java的單例設計模式及實現方法的程式碼舉例

java面試時經常會問到關於單例設計模式,因為它能考察的知識點較多且在開發中經常用到。那我就來說一說我對於單例設計模式的一些淺見。首先,在Java中,什麼是單例呢?就是保證類在記憶體中只有一個物件。那麼

組合(從長度為n的字串取m個字元)---java實現方法

對於這類組合問題,雖然感覺很簡單,但是用java程式碼實現起來卻不是那麼容易的。 這其中最容易用到的應該是遞迴的思想了,這種方法也比較容易理解: 方法一: 遞迴實現程式碼: /** * 可能種類在4000萬的時候時間效率為7.6s左右

Java自定義異常的處理方法

其中註釋掉的部分就是處理方法之一 class DivisorIsZeroException extends Exception { public DivisorIsZeroException(Str

Java程式碼獲取配置檔案(config.properties)內容的方法

方法千千萬,本人暫時只總結了兩種方法。 (1) config.properties中的內容如圖 在applicationContext.xml中配置 <!-- 引入配置檔案 --> <bean id="configProperties" cl

Struts2validate數據校驗的常用方法

red 有一種 資源文件 業務 相同 dna erp wrong 顯示 本文主要介紹Struts2中validate數據校驗的兩種方法及Struts2常用校驗器. 1.Action中的validate()方法 Struts2提供了一個Validateable接口,這個接口

java快排(方法

span ast [] ati pub 方法 color 整體 blog 快排是最基礎的排序算法之一,今天來回顧一下。 public class QuickSort { public static void quickSort(int[] ar

java String轉Long方法區別

基本數據 ring oat 兩種 基本 ava ger parse 兩種方法 第一種:包裝類型:Byte,Integer,Short,Long,Boolean,Character,Float,Double等8種 Long.valueOf("String")返回Long包裝

在IDEA使用Jrebel外掛的破解方法;

作為一個程式設計師都知道熱部署的好處,在每次編碼後不用每次重新啟動專案;使​​用了JRebel的外掛就很方便,但是JRebel的是收費軟體,我所知道的破解方法有兩種; 第一種,從官網激,可以獲得使用吧,但這個還是達不到永久破解的效果,然後又在網上找到了第二種方法; 1)首先在github上上

[Java]HashMap按key排序和按value排序的簡便方法

前言 HashMap的儲存是沒有順序的,而是按照key的HashCode實現. key=手機品牌,value=價格,這裡以這個例子實現按名稱排序和按價格排序. Map phone=new HashMap(); phone.put("Apple",729