轉(zhuǎn)載:http://blog.csdn.net/u012562943/article/details/50461166
mvn -h 可以看到很多命令及其用途;
-am --also-make 同時(shí)構(gòu)建所列模塊的依賴模塊;
-amd -also-make-dependents 同時(shí)構(gòu)建依賴于所列模塊的模塊;
-pl --projects <arg> 構(gòu)建制定的模塊,模塊間用逗號分隔;
-rf -resume-from <arg> 從指定的模塊恢復(fù)反應(yīng)堆。
假設(shè)有如下聚合模塊:account-aggregator ,其依次包含如下幾個(gè)模塊:account-parent, account-email, account-persist;
其中,email和persist模塊都繼承~parent模塊。
[html] view plaincopy
<embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">
- <modules>
- <module>account-email</module>
- <module>account-persist</module>
- <module>account-parent</module>
- </modules>
例一:
當(dāng)執(zhí)行mvn clean install后會(huì)得到如下幾個(gè)模塊:~aggregator, ~parent, ~email, ~persist。
例二:
-pl 構(gòu)建制定模塊
當(dāng)執(zhí)行mvn clean install -pl accouont-email,account-persist后會(huì)得到如下幾個(gè)模塊:email和persist。
例三:
-am 選項(xiàng)可以同時(shí)構(gòu)建所列模塊的依賴模塊。
當(dāng)執(zhí)行mvn clean install -pl account-email -am 后會(huì)得到如下幾個(gè)模塊:parent和email。
例四:
-amd 選項(xiàng)可以同時(shí)構(gòu)建依賴于所列模塊的模塊。
mvn clean install -pl account-parent -amd 后會(huì)得到如下模塊:parent、email和~persist。
例五:
-rf 選項(xiàng)可以在完整的反應(yīng)堆構(gòu)建順序基礎(chǔ)上,指定從哪個(gè)模塊開始構(gòu)建。
mvn clean install -rf account-email ,由于email位于第三,它之后有persist,因此會(huì)得到如下輸出模塊:email和persist。
例六:
在-pl -am或者-pl -amd的基礎(chǔ)上,還能應(yīng)用-rf參數(shù),以對裁剪后的反應(yīng)堆再次裁剪。
mvn clean install -pl account-parent -amd -rf account-email
其中,-pl 和 -amd參數(shù)會(huì)得到:~parent, email和persist模塊,在此基礎(chǔ)上 -rf參數(shù)制定從email開始構(gòu)建,于是會(huì)得到:email和~persist。
轉(zhuǎn)載:http://blog.csdn.net/u012562943/article/details/50461166
一、Maven常用命令
1.1、Maven 參數(shù)
-D 傳入屬性參數(shù)
-P 使用pom中指定的配置
-e 顯示maven運(yùn)行出錯(cuò)的信息
-o 離線執(zhí)行命令,即不去遠(yuǎn)程倉庫更新包
-X 顯示maven允許的debug信息
-U 強(qiáng)制去遠(yuǎn)程參考更新snapshot包
例如 mvn install -Dmaven.test.skip=true -Poracle
其他參數(shù)可以通過mvn help 獲取
1.2、maven常用命令
1、mvn clean
說明: 清理項(xiàng)目生產(chǎn)的臨時(shí)文件,一般是模塊下的target目錄
[圖片上傳失敗...(image-99ef7-1515998131459)]
下面來看看目錄:
2、mvn package
說明: 項(xiàng)目打包工具,會(huì)在模塊下的target目錄生成jar或war等文件,如下運(yùn)行結(jié)果。
生成的文件 如下:
3、mvn test
說明: 測試命令,或執(zhí)行src/test/java/下junit的測試用例.
[圖片上傳失敗...(image-f2af21-1515998131459)]
4、mvn install
說明: 模塊安裝命令 將打包的的jar/war文件復(fù)制到你的本地倉庫中,供其他模塊使用 -Dmaven.test.skip=true 跳過測試(同時(shí)會(huì)跳過test compile)
第一個(gè)紅框是它的輸入路徑,也是本地倉庫的路徑
文件如下 :
5、mvn deploy
說明: 發(fā)布命令 將打包的文件發(fā)布到遠(yuǎn)程參考,提供其他人員進(jìn)行下載依賴 ,一般是發(fā)布到公司的私服,這里我沒配置私服,所以就不演示了。
1.3、maven-eclipse-plugin插件
1、mvn eclipse:eclipse
說明: 生成eclipse配置文件,導(dǎo)入到eclipse開放,如果是使用m2eclipse插件,則可以不用次命令.直接使用插件導(dǎo)入到eclipse進(jìn)行開放
注:通過次命令生產(chǎn)的項(xiàng)目,需要在eclipse中配置M2_HOME的命令,指向你的本地倉庫文件夾.
來看看生成的結(jié)果:。classpath就是字節(jié)碼
[圖片上傳失敗...(image-dbe7a0-1515998131459)]
2、mvn eclipse:m2eclipse
生成eclipse配置文件,該配置文件需依賴eclipse 中有m2eclipse
-DdownloadSources=true 下載依賴包的源碼文件
-Declipse.addVersionToProjectName=true 添加版本信息到項(xiàng)目名稱中
3、mvn eclipse:clean
清除eclipse的項(xiàng)目文件
看看文件內(nèi)容,沒有project文件 了
1.4、maven-jetty-plugin插件
1、mvn jetty:run
說明: 可以直接用jetty的服務(wù)器運(yùn)行 注:此命令只適用于war的模塊,即web模塊.
2、mvn archetype:generate
說明: 模塊創(chuàng)建命令, 執(zhí)行命令后,會(huì)提示選擇創(chuàng)建項(xiàng)目的模版,這里選18(maven-archetype-quickstart)
后面會(huì)提示你輸入groupId(包存放的路徑):
eg:com.lin
提示輸入artifactId(模塊名稱):
eg:test-core
提示輸入version(版本):
1.0.0-SNAPSHOT
提示輸入package(指項(xiàng)目中基本的包路徑):
eg:com.lin
提示確認(rèn),回車即可
1.5、maven-release-plugin插件
說明: 發(fā)行版本,可與scm工具集成,來提供版本管理.不等同與版本控制.允許是必須有g(shù)oal.兩個(gè)常用的goal如下:
1、mvn release:clean
清理release操作是遺留下來的文件
[圖片上傳失敗...(image-b22fa7-1515998131459)]
2、mvn release:branch
說明: 創(chuàng)建分支,會(huì)在分支下創(chuàng)建執(zhí)行的分支路徑
-DbranchName=xxxx-100317 分支中的名稱
-DupdateBranchVersions=false 是否更新分支的版本信息,默認(rèn)為false
-DupdateWorkingCopyVersions=false 是否更新主干的版本信息,默認(rèn)為true
3、mvn release:prepare
創(chuàng)建標(biāo)記,會(huì)有交互過程,提示tag中pom的版本及trunk下的新版本號,每個(gè)模塊都會(huì)詢問,默認(rèn)是最小版本號+1
-Dtag = 4.4.0 將在tags創(chuàng)建該名稱文件夾
-DdryRun=true 檢查各項(xiàng)設(shè)置是否正確,可做測試用,會(huì)產(chǎn)生一些修改的配置文件信息.
命令:
mvn release:perform
次命令會(huì)自動(dòng)幫我們簽出剛才打的tag,然后打包,分發(fā)到遠(yuǎn)程Maven倉庫中
1.6、Maven站點(diǎn)報(bào)表
1、mvn project-info-reports:dependencies
生成項(xiàng)目依賴的報(bào)表
2、mvn dependency:resolve
查看依賴
查看項(xiàng)目依賴情況
3、mvn dependency:tree
打印出項(xiàng)目的整個(gè)依賴樹
4、mvn dependency:analyze
幫助你分析依賴關(guān)系, 用來取出無用, 重復(fù)依賴的好幫手
5、mvn install -X
追蹤依賴的完整軌跡
6、生命周期
resource->compile->process-classes->process-test-resources->test-compile->test->prepare-package->package
resources:resources 綁定在resource處理階段, 用來將src/main/resources下或者任何指定其他目錄下的文件copy到輸出目錄中
resources:testResources 將test下的resources目錄或者任何指定其他目錄copy到test輸出目錄下
compiler:testCompile 將測試類編譯(包括copy資源文件)
surefire:test 運(yùn)行測試用例
jar:jar 打jar包
二、各種范圍
compile(編譯范圍)
compile是默認(rèn)的范圍;如果沒有提供一個(gè)范圍,那該依賴的范圍就是編譯范圍。編譯范圍依賴在所有的classpath中可用,同時(shí)它們也會(huì)被打包。
provided(已提供范圍)
provided依賴只有在當(dāng)JDK或者一個(gè)容器已提供該依賴之后才使用。例如,如果你開發(fā)了一個(gè)web應(yīng)用,你可能在編譯classpath中需要可用的Servlet API來編譯一個(gè)servlet,但是你不會(huì)想要在打包好的WAR中包含這個(gè)Servlet API;這個(gè)Servlet API JAR由你的應(yīng)用服務(wù)器或者servlet容器提供。已提供范圍的依賴在編譯classpath(不是運(yùn)行時(shí))可用。它們不是傳遞性的,也不會(huì)被打包。
runtime(運(yùn)行時(shí)范圍)
runtime依賴在運(yùn)行和測試系統(tǒng)的時(shí)候需要,但在編譯的時(shí)候不需要。比如,你可能在編譯的時(shí)候只需要JDBC API JAR,而只有在運(yùn)行的時(shí)候才需要JDBC驅(qū)動(dòng)實(shí)現(xiàn)。
test(測試范圍)
test范圍依賴 在一般的 編譯和運(yùn)行時(shí)都不需要,它們只有在測試編譯和測試運(yùn)行階段可用。
system(系統(tǒng)范圍)
system范圍依賴與provided類似,但是你必須顯式的提供一個(gè)對于本地系統(tǒng)中JAR文件的路徑。這么做是為了允許基于本地對象編譯,而這些對象是系統(tǒng)類庫的一部分。這樣的構(gòu)件應(yīng)該是一直可用的,Maven也不會(huì)在倉庫中去尋找它。。如果你將一個(gè)依賴范圍設(shè)置成系統(tǒng)范圍,你必須同時(shí)提供一個(gè)systemPath元素。注意該范圍是不推薦使用的(你應(yīng)該一直盡量去從公共或定制的Maven倉庫中引用依賴)。
三、POM文件講解
POM全稱是Project Object Model,即項(xiàng)目對象模型。pom.xml是maven的項(xiàng)目描述文件,它類似與antx的project.xml文件。pom.xml文件以xml的 形式描述項(xiàng)目的信息,包括項(xiàng)目名稱、版本、項(xiàng)目id、項(xiàng)目的依賴關(guān)系、編譯環(huán)境、持續(xù)集成、項(xiàng)目團(tuán)隊(duì)、貢獻(xiàn)管理、生成報(bào)表等等。總之,它包含了所有的項(xiàng)目 信息。
3.2.1. pom.xml的基本配置
[java] view plaincopy
<embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=18&height=18" wmode="transparent">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lin.learning</groupId>
<artifactId>maven-hellowrold</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>maven-hellowrold</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
modelVersion 描述這個(gè)POM文件是遵從哪個(gè)版本的項(xiàng)目描述符。
groupId 針對一個(gè)項(xiàng)目的普遍唯一識別符。通常用一個(gè)完全正確的包的名字來與其他項(xiàng)目的類似名字來進(jìn)行區(qū)分(比如:org.apache.maven)。
artifactId 在給定groupID 的group里面為artifact 指定的標(biāo)識符是唯一的 , artifact 代表的是被制作或者被一個(gè)project應(yīng)用的組件(產(chǎn)出物)。
version 當(dāng)前項(xiàng)目產(chǎn)生的artifact的版本以上4個(gè)元素缺一不可,其中g(shù)roupId, artifactId, version描述依賴的項(xiàng)目唯一標(biāo)志。
1. pom.xml文件結(jié)構(gòu)
[html] view plaincopy
<embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=18&height=18" wmode="transparent">
- <project>
- <modelVersion>4.0.0</modelVersion>
- <!- The Basics 項(xiàng)目的基本信息->
- <groupId>...</groupId>
- <artifactId>...</artifactId>
- <version>...</version>
- <packaging>...</packaging>
- <dependencies>...</dependencies>
- <parent>...</parent>
- <dependencyManagement>...</dependencyManagement>
- <modules>...</modules>
- <properties>...</properties>
- <!- Build Settings 項(xiàng)目的編譯設(shè)置->
- <build>...</build>
- <reporting>...</reporting>
- <!- More Project Information 其它項(xiàng)目信息 ->
- <name>...</name>
- <description>...</description>
- <url>...</url>
- <inceptionYear>...</inceptionYear>
- <licenses>...</licenses>
- <organization>...</organization>
- <developers>...</developers>
- <contributors>...</contributors>