1. 程式人生 > >maven用途、核心概念、用法、常用引數和命令、擴充套件

maven用途、核心概念、用法、常用引數和命令、擴充套件

本文由淺入深,主要介紹maven的用途核心概念(Pom、Repositories、Artifact、Build Lifecycle、Goal)介紹、用法(Archetype意義及建立各種專案)maven常用引數和命令以及簡單故障排除、maven擴充套件(eclipse、cobertura、findbugs、外掛開發)、maven配置

本文較長,可根據個人需要有選擇性的檢視,比如先看用法再回過頭來看核心概念

1、maven的用途

maven是一個專案構建和管理的工具,提供了幫助管理 構建文件報告依賴scms釋出分發的方法。可以方便的編譯程式碼、進行依賴管理、管理二進位制庫等等。

maven的好處在於可以將專案過程規範化、自動化、高效化以及強大的可擴充套件性

利用maven自身及其外掛還可以獲得程式碼檢查報告、單元測試覆蓋率、實現持續整合等等。

2、maven的核心概念介紹

2.1 Pom

pom是指project object Model。pom是一個xml,在maven2裡為pom.xml。是maven工作的基礎,在執行task或者goal時,maven會去專案根目錄下讀取pom.xml獲得需要的配置資訊

pom檔案中包含了專案的資訊和maven build專案所需的配置資訊,通常有專案資訊(如版本、成員)、專案的依賴、外掛和goal、build選項等等

pom是可以繼承的

,通常對於一個大型的專案或是多個module的情況,子模組的pom需要指定父模組的pom

pom檔案中節點為

Java程式碼  收藏程式碼
  1. project pom檔案的頂級元素  
  2. modelVersion 所使用的object model版本,為了確保穩定的使用,這個元素是強制性的。除非maven開發者升級模板,否則不需要修改  
  3. groupId 是專案建立團體或組織的唯一標誌符,通常是域名倒寫,如groupId  org.apache.maven.plugins就是為所有maven外掛預留的  
  4. artifactId 是專案artifact唯一的基地址名  
  5. packaging artifact打包的方式,如jar、war、ear等等。預設為jar。這個不僅表示專案最終產生何種字尾的檔案,也表示build過程使用什麼樣的<a target="_blank"
     href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings">lifecycle</a>。  
  6. version artifact的版本,通常能看見為類似0.0.1-SNAPSHOT,其中SNAPSHOT表示專案開發中,為開發版本  
  7. name 表示專案的展現名,在maven生成的文件中使用  
  8. url表示專案的地址,在maven生成的文件中使用  
  9. description 表示專案的描述,在maven生成的文件中使用  
  10. dependencies 表示依賴,在子節點dependencies中新增具體依賴的groupId artifactId和version  
  11. build 表示build配置  
  12. parent 表示父pom  

其中groupId:artifactId:version唯一確定了一個artifact

2.2 Artifact

這個有點不好解釋,大致說就是一個專案將要產生的檔案,可以是jar檔案,原始檔,二進位制檔案,war檔案,甚至是pom檔案。每個artifact都由groupId:artifactId:version組成的識別符號唯一識別。需要被使用(依賴)的artifact都要放在倉庫(見Repository)中

2.3 Repositories

Repositories是用來儲存Artifact的。如果說我們的專案產生的Artifact是一個個小工 具,那麼Repositories就是一個倉庫,裡面有我們自己建立的工具,也可以儲存別人造的工具,我們在專案中需要使用某種工具時,在pom中宣告 dependency,編譯程式碼時就會根據dependency去下載工具(Artifact,供自己使用。

對於自己的專案完成後可以通過mvn install命令將專案放到倉庫(Repositories)中

倉庫分為本地倉庫和遠端倉庫,遠端倉庫是指遠端伺服器上用於儲存Artifact的倉庫,本地倉庫是指本機儲存Artifact的倉庫,對於windows機器本地倉庫地址為系統使用者的.m2/repository下面。

對於需要的依賴,在pom中新增dependency即可,可以在maven的倉庫中搜索:http://mvnrepository.com/

2.4 Build Lifecycle

是指一個專案build的過程。maven的Build Lifecycle分為三種,分別為default(處理專案的部署)、clean(處理專案的清理)、site(處理專案的文件生成)。他們都包含不同的lifecycle

Build Lifecycle是由phases構成的,下面重點介紹default Build Lifecycle幾個重要的phase

Xml程式碼  收藏程式碼
  1. validate 驗證專案是否正確以及必須的資訊是否可用  
  2. compile 編譯原始碼  
  3. test 測試編譯後的程式碼,即執行單元測試程式碼  
  4. package 打包編譯後的程式碼,在target目錄下生成package檔案  
  5. integration-test 處理package以便需要時可以部署到整合測試環境  
  6. verify 檢驗package是否有效並且達到質量標準  
  7. install 安裝package到本地倉庫,方便本地其它專案使用  
  8. deploy 部署,拷貝最終的package到遠端倉庫和替他開發這或專案共享,在整合或釋出環境完成   

以上的phase是有序的(注意實際兩個相鄰phase之間還有其他phase被省略,完整phase見lifecycle),下面一個phase的執行必須在上一個phase完成後

若直接以某一個phase為goal,將先執行完它之前的phase,如mvn install

將會先validate、compile、test、package、integration-test、verify最後再執行install phase

2.5 Goal

goal代表一個特定任務

Xml程式碼  收藏程式碼
  1. A goal represents a specific task (finer than a build phase) which contributes to the building and managing of a project.  

mvn package表示打包的任務,通過上面的介紹我們知道,這個任務的執行會先執行package phase之前的phase

mvn deploy表示部署的任務

mven clean install則表示先執行clean的phase(包含其他子phase),再執行install的phase。

3、maven用法

主要講下Archetype以及幾種常用專案的建立

maven建立專案是根據Archetype(原型)建立的。下面先介紹下Archetype

3.1 Archetype

原型對於專案的作用就相當於模具對於工具的作用,我們想做一個錘子,將鐵水倒入模具成型後,稍加修改就可以了。

類似我們可以根據專案型別的需要使用不同的Archetype建立專案。通過Archetype我們可以快速標準的建立專案。利用Archetype建立完專案後都有標準的資料夾目錄結構

既然Archetype相當於模具,那麼當然可以自己再造模具了啊,建立Archetype

下面介紹利用maven自帶的集中Archetype建立專案。建立專案的goal為mvn archetype:generate,並且指定archetypeArtifactId,其中archetypeArtifactId見maven自帶的archetypeArtifactId

3.2 quick start工程

建立一個簡單的quick start專案,指定 -DarchetypeArtifactId為maven-archetype-quickstart,如下命令

Xml程式碼  收藏程式碼
  1. mvn archetype:generate -DgroupId=com.trinea.maven.test -DartifactId=maven-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

其中DgroupId指定groupId,DartifactId指定artifactId,DarchetypeArtifactId指定ArchetypeId,

DinteractiveMode表示是否使用互動模式,互動模式會讓使用者填寫版本資訊之類的,非互動模式採用預設值

這樣我們便建好了一個簡單的maven專案,目錄結構如下:


現在我們可以利用2.4的build Lifecycle進行一些操作,先命令列到工程根目錄下

編譯 mvn  compile

打包 mvn package,此時target目錄下會出現maven-quickstart-1.0-SNAPSHOT.jar檔案,即為打包後文件

打包並安裝到本地倉庫mvn install,此時本機倉庫會新增maven-quickstart-1.0-SNAPSHOT.jar檔案。

3.3 web工程

建立一個簡單的web專案,只需要修 -DarchetypeArtifactId為maven-archetype-webapp即可,如下命令

Java程式碼  收藏程式碼
  1. mvn archetype:generate -DgroupId=com.trinea.maven.web.test -DartifactId=maven-web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

其他:

src\main\resources資料夾是用來存放資原始檔的,maven工程預設沒有resources資料夾,如果我們需要用到類似log4j.properties這樣的配置檔案,就需要在src\main資料夾下新建resources資料夾,並將log4j.properties放入其中。

test需要用到資原始檔,類似放到src\test下

對於apache的log4j沒有log4j.properties檔案或是目錄錯誤,會報如下異常

Xml程式碼  收藏程式碼
  1. log4j:WARN No appenders could be found for logger (org.apache.commons.httpclient.HttpClient).  
  2. log4j:WARN Please initialize the log4j system properly.  

4、maven常用引數和命令

主要介紹maven常用引數和命令以及簡單故障排除

4.1 mvn常用引數

mvn -e 顯示詳細錯誤

mvn -U 強制更新snapshot型別的外掛或依賴庫(否則maven一天只會更新一次snapshot依賴)

mvn -o 執行offline模式,不聯網更新依賴

mvn -N僅在當前專案模組執行命令,關閉reactor

mvn -pl module_name在指定模組上執行命令

mvn -ff 在遞迴執行命令過程中,一旦發生錯誤就直接退出

mvn -Dxxx=yyy指定java全域性屬性

mvn -Pxxx引用profile xxx

4.2 首先是2.4 Build Lifecycle中介紹的命令

mvn test-compile 編譯測試程式碼

mvn test 執行程式中的單元測試

mvn  compile 編譯專案

mvn package 打包,此時target目錄下會出現maven-quickstart-1.0-SNAPSHOT.jar檔案,即為打包後文件

mvn install 打包並安裝到本地倉庫,此時本機倉庫會新增maven-quickstart-1.0-SNAPSHOT.jar檔案。

每個phase都可以作為goal,也可以聯合,如之前介紹的mvn clean install

4.3 maven 日用三板斧

mvn archetype:generate 建立maven專案

mvn package 打包,上面已經介紹過了

mvn package -Prelease打包,並生成部署用的包,比如deploy/*.tgz

mvn install 打包並安裝到本地庫

mvn eclipse:eclipse 生成eclipse專案檔案

mvn eclipse:clean 清除eclipse專案檔案

mvn site 生成專案相關資訊的網站

4.4 maven外掛常用引數

mvn -Dwtpversion=2.0 指定maven版本

mvn -Dmaven.test.skip=true 如果命令包含了test phase,則忽略單元測試

mvn -DuserProp=filePath 指定使用者自定義配置檔案位置

mvn -DdownloadSources=true -Declipse.addVersionToProjectName=true eclipse:eclipse 生成eclipse專案檔案,嘗試從倉庫下載原始碼,並且生成的專案包含模組版本(注意如果使用公用POM,上述的開關預設已開啟)

4.5 maven簡單故障排除

mvn -Dsurefire.useFile=false如果執行單元測試出錯,用該命令可以在console輸出失敗的單元測試及相關資訊

set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m 調大jvm記憶體和持久代,maven/jvm out of memory error

mvn -X maven log level設定為debug在執行

mvndebug 執行jpda允許remote debug

mvn --help 這個就不說了。。

5、maven擴充套件

6、maven配置

maven2.0預設使用jdk1.5導致反省、@override 等annotation不可用。可用兩種方法修改jdk版本

第一種:修改專案的pom.xml,影響單個專案,治標不治本

Java程式碼  收藏程式碼
  1. <build>  
  2.     <plugins>  
  3.         <plugin>  
  4.             <groupId>org.apache.maven.plugins</groupId>  
  5.             <artifactId>maven-compiler-plugin</artifactId>  
  6.             <configuration>  
  7.                 <source>1.6</source>  
  8.                 <target>1.6</target>  
  9.                 <encoding>UTF-8</encoding>  
  10.             </configuration>  
  11.         </plugin>  
  12.     </plugins>  
  13. </build>  

pom中增加build配置,指定java版本為1.6

第二種:修改maven配置,影響maven建立的所有專案

到maven安裝目錄的conf資料夾下,修改settings.xml檔案,如下:

Java程式碼  收藏程式碼
  1. <profiles>     
  2.        <profile>       
  3.             <id>jdk-1.6</id>       
  4.             <activation>       
  5.                 <activeByDefault>true</activeByDefault>       
  6.                 <jdk>1.6</jdk>       
  7.             </activation>       
  8.             <properties>       
  9.                 <maven.compiler.source>1.6</maven.compiler.source>       
  10.                 <maven.compiler.target>1.6</maven.compiler.target>       
  11.                 <maven.compiler.compilerVersion>1.6</maven.compiler.compilerVersion>       
  12.             </properties>       
  13.     </profile>      
  14. </profiles>   

這樣便能對所有預設的maven專案指定jdk為1.6

到此為止,休息會兒

參考資料:

轉載

http://trinea.iteye.com/blog/1290898

相關推薦

maven用途核心概念用法常用引數命令擴充套件

本文由淺入深,主要介紹maven的用途、核心概念(Pom、Repositories、Artifact、Build Lifecycle、Goal)介紹、用法(Archetype意義及建立各種專案)、maven常用引數和命令以及簡單故障排除、maven擴充套件(eclipse、cobertura、findb

maven介紹(作用,核心概念用法常用命令,擴張及配置)

maven介紹(作用,核心概念,用法,常用命令,擴張及配置) maven作用,核心概念(pom,repositories,artifact,build lifecycle,goal),用法(archetype意義及建立各種專案),maven常用引數和命令以及簡單故障排除 1、maven的作用 &

JS概念理解(一)——函式物件原型鏈_proto_

        最近發現自己JS的基礎不太好,於是通過看書和大神的部落格,通過自己的理解將一些難懂的概念在此總結:         1.函式和物件的關係:         在JavaScript中一切物件都是通過函式建立的,某些情況下的寫法實際上是一種語法糖: var a

PHP設計模式:類自動載入PSR-0規範鏈式操作11種面向物件設計模式實現使用OOP的基本原則自動載入配置

一、類自動載入      SPL函式 (standard php librarys)      類自動載入,儘管 __autoload() 函式也能自動載入類和介面,但更建議使用&nbs

Java筆記(10)-圖形介面設計Swing視窗JFrame常用元件佈局處理事件MVC結構對話方塊GUI

我希望有個如你一般的人 如山間清爽的風 如古城溫暖的光 只要最後是你就好 今天 你路過了誰 誰又丟失了你呢 或者 從你的全世界路過 圖形介面設計 1 Java Swing 概述 圖形化介面(Graphics User Int

Python全棧學習筆記day 27: isinstanceissubclass反射類的內建方法(__str____repr____del____call__)

一、isinstance和issubclass isinstance(obj,cls)檢查是否obj是否是類 cls 的物件 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo))

JavaScript: 再論setTimeoutsetInterval。其第三個引數this的討論,超時巢狀記憶體洩漏

   最近用setTimeout、setInterval,因為要傳入的函式要用到this,所以深入瞭解了一番! setTimeout和setInterval函式的第三個引數本來只是定義語言型別,後來在非IE瀏覽器下支援傳遞引數,並且在不同瀏覽器下支援的不同。 原來的set

Maven筆記之核心概念常用命令

Maven的核心概念 Maven是一款服務於java平臺的自動化構建工具。 自動化構建工具還有:make->ant->maven->gradle       1.約定的目錄        2.POM Project Object

ElasticSearch筆記整理(二):CURL操作ES插件集群安裝與核心概念

大數據 ElasticSearch ELK [TOC] CURL操作 CURL簡介 curl是利用URL語法在命令行方式下工作的開源文件傳輸工具,使用curl可以簡單實現常見的get/post請求。簡單的認為是可以在命令行下面訪問url的一個工具。在centos的默認庫裏面是有curl工具的,如

作業系統(6)程序---程序概念:程序控制程序狀態三狀態模型掛起模型;執行緒概念:使用者執行緒核心執行緒輕權執行緒

文章目錄 1:程序相關概念 1. 程序的概念 2. 程序控制塊 3. 程序狀態 4. 三狀態程序模型(就緒、執行、阻塞/等待) 5. 掛起程序模型 2:程序控制

RocketMq核心概念

一、Producer   生產者將業務應用程式系統生成的訊息傳送給代理。RocketMQ提供多種傳送範例:同步,非同步和單向。 二、Producer Group   具有相同角色的生產者組合在一起。如果原始生產者在事務之後崩潰,則代理可以聯絡同一生產者組的不同生產者例項以提交或回滾事務。   警告:考

VFS的核心概念:filedentryinodesuper_block

每個程序在PCB(Process Control Block)中都儲存著一份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有一個指向已開啟檔案的指標,已開啟的檔案在核心中用file結構體表示,檔案描述符表中的指標指向file結構體。 在file結構體中維護File Status Flag(file結構

繼承 過載覆蓋的概念及其用法

一:繼承 1.繼承的概念: 是對現有的類加以利用,併為其新增新功能的一種有效途徑。通過繼承來重複使用原有的程式碼(再生), 一般需要保持“基礎類”不變,只是將這兒或哪兒的東西串聯起來,以達到預期的效果,然而,繼承並不是在現有類基礎上製造新類的唯一方法。 通過“合

Spark2.x學習筆記:3 Spark核心概念RDD

Spark學習筆記:3、Spark核心概念RDD 3.1 RDD概念 彈性分散式資料集(Resilient Distributed Datasets,RDD) ,可以分三個層次來理解: 資料集:故名思議,RDD 是資料集合的抽象,是複雜物理介質上存在資料的一種邏輯檢視。

docker核心概念(映象容器倉庫)

原文:https://www.cnblogs.com/whych/p/9446032.html 概要     docker是一種linux容器技術。容器有效的將由單個作業系統掛管理的資源劃分到孤立的組中,以便更好的在組之間平衡有衝突的資源使用需求。可簡

Spring之IOC核心容器Bean概念詳解

    這一週忙了很多與程式碼無關的事,感覺心態上還是有些急躁,週中挑幾個晚上看了一些文章,上午起來總結了一下,下午開始寫部落格,因為沒有時間擼程式碼,所以就打算先把看到的概念梳理梳理,磨刀不誤砍柴工。    首先來看一看什麼是IOC,他的全稱是Inversion of Co

Maven plugin中的lifecyclephasegoal概念及作用的理解

lifecycle:生命週期,這是maven最高級別的的控制單元,它是一系列的phase組成,也就是說,一個生命週期,就是一個大任務的總稱,不管它裡面分成多少個子任務,反正就是執行一個lifecycle,就是交待了一個任務,執行完後,就得到了一個結果,中間的過程,是phas

5分鐘學會Docker核心概念安裝埠對映及常用操作命令

                                             Docker 一、Docker簡介 Docker是開源應用容器引擎,輕量級容器技術。 基於Go語言,並遵循Apache2.0協議開源 Docker可以讓開發

Knative 核心概念介紹:BuildServing Eventing 三大核心元件

Knative 主要由 Build、Serving 和 Eventing 三大核心元件構成。Knative 正是依靠這三個核心元件

【2017-05-22】WebForm內置對象:ApplicationViewStateRepeater的Command用法

操作數 傳值 rep 服務器 創建 bject bsp strong () 一、內置對象 1、Application 存貯在服務器端,占用服務器內存生命周期:永久 所有人訪問的都是這一個對象 傳值:傳的是object類型可以傳對象。 string s =TextBox1.T