3.示例
1)創(chuàng)建項目
mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.yy.testweb1 -DartifactId=testweb1 -DarchetypeArtifactId=maven-archetype-quickstart -DpackageName=com.yy.testweb1 -Dversion=1.0
archetype:generate 目標傳入了 version參數(shù)。它覆寫了默認值 1.0-SNAPSHOT
2)添加組織月腋,法律和開發(fā)人員信息
3)項目依賴
如果你需要找出 classpath 中有什么北启,你可以使用 Maven Dependency 插 件來打印出已解決依賴的列表
mvn dependency:resolve
如果你想知道你項目的整個依賴樹
mvn?dependency:tree
如果想要查看完整的依賴蹤跡吞加,包含那些因為沖突或者其它原因而被拒絕引入的構(gòu)件
mvn install -X? ?(-X開啟調(diào)試輸出感憾,打印debug日志)
依賴一個包搁宾,其中scope依賴范圍代表侧漓,在一般的編譯和運行時都不需要罚舱,它們只有在測試編譯和測試運行階段可用培愁。
?<dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version><scope>test</scope></dependency>
4)單元測試
mvn test
test階段是 Maven 生命周期中常規(guī)的一部分著摔,如果想要運行到 test階段為止的所有生命周期階段,運行 mvn test定续。
如果你的測試失敗了谍咆,你可以去/target/surefire-reports目錄查看,里面有你單元測試生成的異常堆棧信息和錯誤信息私股。如果想運行系統(tǒng)中的test并且忽略掉失敗的則可以使用:
mvn test -Dmaven.test.failure.ignore=true
運行 mvn package或者 mvn install的時候也會運行到test摹察,如果不想運行test,則添加 -Dmaven.test.skip=true (mvn package?-Dmaven.test.skip=true)另外package是把jar打到本項目的target下倡鲸,而install時把target下的jar安裝到本地倉庫供嚎,供其他項目使用。deploy 是上傳到遠程倉庫峭状。
5)配置插件
創(chuàng)建web項目:mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.yy.testweb2 -DartifactId=testweb2 -DarchetypeArtifactId=maven-archetype-webapp
增加插件克滴,定義打包名稱,注意此處插件開發(fā)者提供了默認值宁炫,如果需要自定義一些屬性偿曙,則需加入configuration元素
運行插件啟動項目 :mvn jetty:run
訪問:http://localhost:8080/testweb2/
6)多模塊構(gòu)建
多模塊時需要提出單獨parent項目,它僅僅是一個引用其它Maven項目的POM羔巢,并且打包結(jié)果為pom共子項目引用望忆。
當Maven執(zhí)行一個帶有子模塊的項目的時候,Maven首先載入父POM竿秆,然后定位所有的子模塊POM启摄。Maven然后將所有這些項目的POM放入到一個稱為Maven 反應(yīng)堆(Reactor)的東西中,由它負責分析模塊之間的依賴關(guān)系幽钢。這個反應(yīng)堆處理組件的排序歉备,以確保相互獨立的模塊能以適當?shù)捻樞虮痪幾g和安裝。
7)pom優(yōu)化
優(yōu)化一個多模塊項目的POM匪燕,尋找一個POM中的重復(fù)蕾羊,或者多個兄弟POM中的重復(fù)喧笔。企業(yè)級項目中創(chuàng)建的不同POM,就會注意到幾種重復(fù)模式龟再。第一種重復(fù)模式是:一些依賴如spring和在多個模塊中被聲明书闸。第二種重復(fù)模式是:有一些依賴是關(guān)聯(lián)的,共享同樣的版本利凑,比如log4j2浆劲。
第一種重復(fù)使用dependencyManagement解決,將共同依賴放入parent的dependencyManagement中哀澈,子級pom去掉依賴版本和排除配置牌借。
第二種重復(fù)在父pom中增加properties,設(shè)置版本割按。
優(yōu)化插件膨报,使用dependencyManagement在父pom中定義插件,在子pom中直接使用哲虾。
使用Maven Dependency插件對pom進行優(yōu)化丙躏,能夠發(fā)現(xiàn)對于依賴的直接引用
mvn dependency:analyze??
Used undeclared dependencies
該列表列出的是程序代碼直接用到的、但并沒在pom.xml里定義的依賴項束凑。
Unused declared dependencies
該列表列出的是程序代碼沒用到的晒旅、但在pom.xml里定義的依賴項。注意汪诉,該列表可能不準確废恋,因為程序代碼可能使用了反射技術(shù),在運行時需要這些jar包存在扒寄。
mvn dependency:tree? 依賴樹
只關(guān)心log4j依賴
mvn dependency:tree -Dincludes=log4j:log4j或mvn dependency:tree -Dincludes=*:log4j
一個依賴項可能來自多處鱼鼓,可加上"-Dverbose"參數(shù)進行查看
mvn dependency:tree -Dincludes=*:spring-core -Dverbose
使用maven-dependency-plugin對pom.xml文件進行優(yōu)化
優(yōu)化的目標是不多不少地定義依賴項。不僅依賴項的個數(shù)要不多不少该编,而且依賴項的作用域也要恰到好處迄本。其驗證方法是:
1.檢查是否少定義了依賴項,即執(zhí)行mvn clean dependency:analyze后课竣,應(yīng)沒有Used undeclared dependencies列表嘉赎。Unused declared dependencies列表中的依賴項需人工判斷是否有必要存在,若無必要則請刪除于樟。特別地公条,對于其中的compile和test依賴項,如果不需要或能被其它依賴項傳遞帶出則請刪除迂曲。檢查方法是:先刪除該依賴項重試靶橱。如果重試成功則保持刪除,如果不成功則改為test再重試,如果重試不成功則改為compile关霸。如果你熟悉dependency:tree命令传黄,你也可以從該命令的輸出直接看到預(yù)期的結(jié)果。既然我們的代碼沒用到那個依賴項谒拴,為什么刪除該依賴項可能導(dǎo)致編譯不通過呢尝江?這可能的原因是我們所依賴的依賴項其本身又依賴了其它依賴項涉波,但它們之間是provided或optional關(guān)系英上,導(dǎo)致不傳遞依賴。
2.檢查是否多定義了依賴項啤覆,并檢查作用域是否定大了苍日,即執(zhí)行mvn clean dependency:analyze -Dmaven.test.skip=true后,應(yīng)沒有Used undeclared dependencies列表窗声。上面第一步通過后相恃,這里肯定不會出現(xiàn)該列表。Unused declared dependencies列表中可以含有任意作用域的依賴項笨觅。我們需要去檢查能否縮小作用域的范圍拦耐,特別地,需要重點檢查compile作用域是否能縮小到test见剩、provided杀糯、runtime和system,如果能則改之苍苞。
3.以上步驟中如果修改了pom.xml文件固翰,則請回到第一步重新開始驗證,以保證優(yōu)化前能編譯通過羹呵。
4.執(zhí)行mvn clean test命令做進一步驗證骂际。
https://www.cnblogs.com/yang-wu/p/3262499.html