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檔案中節點含義如下:
其中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
以上的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代表一個特定任務
如
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程式碼 收藏程式碼
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即可,如下命令
其他:
src\main\resources資料夾是用來存放資原始檔的,maven工程預設沒有resources資料夾,如果我們需要用到類似log4j.properties這樣的配置檔案,就需要在src\main資料夾下新建resources資料夾,並將log4j.properties放入其中。
test需要用到資原始檔,類似放到src\test下
對於apache的log4j沒有log4j.properties檔案或是目錄錯誤,會報如下異常
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擴充套件
maven常用外掛配置和使用
6、maven配置
為了修改maven建立專案預設以來的jdk版本,看了下maven配置
maven2.0預設使用jdk1.5導致反省、@override 等annotation不可用。可用兩種方法修改jdk版本
第一種:修改專案的pom.xml,影響單個專案,治標不治本
pom中增加build配置,指定java版本為1.6
第二種:修改maven配置,影響maven建立的所有專案
到maven安裝目錄的conf資料夾下,修改settings.xml檔案,如下:
這樣便能對所有預設的maven專案指定jdk為1.6
到此為止,休息會兒
參考資料:
Maven官方文件:http://maven.apache.org/guides/index.html
maven安裝:http://maven.apache.org/download.html
相關文章
- PHP核心介紹及擴充套件開發指南—類和物件PHP套件物件
- Maven是什麼? Maven的概念+作用+倉庫的介紹+常用命令Maven
- 線性迴歸—求解介紹及迴歸擴充套件套件
- php擴充套件模組作用及中文註釋PHP套件
- Laravel-admin 新增擴充套件介紹Laravel套件
- 自定義擴充套件jQuery功能簡單介紹套件jQuery
- weex ios擴充套件類的作用iOS套件
- SAPS/4HANAextensibility擴充套件原理介紹套件
- Vitalik出席社群會議,介紹Plasma擴充套件方案ASM套件
- RabbitMQ實戰:擴充套件介紹與系列總結MQ套件
- Maven筆記之核心概念及常用命令Maven筆記
- gcc核心擴充套件linuxforum(轉)GC套件Linux
- SAP S/4HANA extensibility擴充套件原理介紹套件
- SAP Spartacus checkout 流程的擴充套件(extend)實現介紹套件
- IBM Lotus Symphony 拼寫檢查功能介紹及使用者擴充套件IBM套件
- CONNECT BY 擴充套件用法,實現獲取bom級聯擴充套件數量套件
- windbg除錯系列教程:sos擴充套件的介紹和使用除錯套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- iOS 推送通知及推送擴充套件iOS套件
- JavaScript 原生物件及擴充套件JavaScript物件套件
- 安裝PHP及Memcache擴充套件PHP套件
- 介紹兩個好玩的和Github相關的Chrome擴充套件GithubChrome套件
- (PHP7核心剖析-11) 模組擴充套件PHP套件
- 聊聊Dubbo(五):核心原始碼-SPI擴充套件原始碼套件
- HybridDBforPostgreSQL(Greenplum)有哪些核心擴充套件SQL套件
- python自帶快取lru_cache用法及擴充套件(詳細)Python快取套件
- WCF擴充套件:行為擴充套件Behavior Extension套件
- PHPMemcache擴充套件安裝配置步驟PHP套件
- 擴充套件部署(Reporting Services 配置)套件
- Redis介紹及常用命令Redis
- 理解maven的核心概念Maven
- CentOS安裝RabbitMQ及PHP擴充套件CentOSMQPHP套件
- Swift 核心動畫 面向協議 擴充套件封裝Swift動畫協議套件封裝
- Linux 核心使用的 GNU C 擴充套件(轉)Linux套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Nelsen-Siegel—Svensson擴充套件模型簡介套件模型
- Java管理擴充套件指南之MBean簡介Java套件Bean
- Sanic 擴充套件套件