maven筆記

生成一個web的maven項目:web

mvn archetype:create -DgroupId=com -DartifactId=simple-web -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeCatalog=local緩存

-DarchetypeCatalog表示使用本地緩存的catalog,不用每次生成的時候都去查詢。網絡

上面能夠出現the defined artifact is not an archetype的錯誤,這個錯誤能夠經過一、刪除本地庫,二、刪除其它的mirror,只使用maven的庫。從新生成便可。app

 

使用對應的profile來構建:webapp

mvn install -PprofileNamemaven

 

調試測試用例:測試

mvn -Dmaven.surefire.debug test

RESTService,webservice jax-rs的實現,裏面包含了deploy方法。spa

surefire plugin運行測試用例失敗時候打印Stack trace:debug

mvn test -Dsurefire.useFile=false

forkMode可讓第個Test使用不一樣的ClassLoader,這樣可使得一些依賴於系統屬性的常量值在不一樣的Test中獲得不一樣的設置調試

  forkMode 可設置值有 「never」, 「once」, 「always」 和 「pertest」  

 -DinteractiveMode=false 非交互模式

surefire測試指定類

>mvn test -Dtest=[ClassName]
運行測試類中指定的方法:(這個須要maven-surefire-plugin:2.7.3以上版本才能支持)
 
>mvn test -Dtest=[ClassName]#[MethodName] 
//[MethodName]爲要運行的方法名,支持*通配符,範例:
>mvn test -Dtest=MyClassTest#test1
>mvn test -Dtest=MyClassTest#*test*

 

以離線模式運行,這樣子maven就不會去嘗試更新/檢查本地庫了,在私服沒有啓動等狀況下能夠節省網絡訪問上消耗的時間:

maven clean install --offline

 
簡單地用 dependency:tree每每並不能查看到全部的傳遞依賴。不過若是你真的想要看全部的,必須得加一個 -Dverbose參數,這時就一定是最全的了。

 

今天修改了一會兒module的依賴時候,構建項目的時出現dependencies.dependency.version for xxx is missing,  transitive dependencies will be ignore。致使另外一下工程打包時候相關的依賴沒有打進來,(even though the dependency is already declared in its parent's pom file's dependency management section)即便parent pom已經含有相關<dependency>的version,但貌似沒有生效,後面在stackoverflow查找到了相關問題,發現parent pom沒有安裝到本地庫引發的。

 

2017-10-24: 今天在技術交流羣裏面看到一個maven解決依賴版本衝突的問題,特意複習了一下maven解決版本衝突的方式:

maven解決版本衝突主要是兩個原則。

  • 路徑最短原則:如上圖E1的路徑是「項目-A-E1」,E2的路徑是「項目-B-F-E2」,由於E1路徑比E2短,因此最終會選擇E1而不用E2。
  • 優先聲明原則:當出現路徑長短相同的時候,誰先聲明就用誰。如F1和F2的路徑距離相同,可是因爲F1比F2先聲明(B比C先聲明),因此最終使用F1。
相關文章
相關標籤/搜索