《Maven實戰(zhàn)》 閱讀筆記

無Maven不項目,這是我的口號,但是一直沒有系統(tǒng)的去看書,前段時間把《Maven實戰(zhàn)》過了一遍做了些筆記,方便后面查閱

每個項目都有自己的坐標(biāo)

  • groupId
  • artifactId
  • version
  • packaging
  • classifier


    1.png
2.png
  • install 安裝在本地
  • deploy 打包發(fā)布到遠端

依賴范圍

3.png

范圍類型有: 編譯、測試、運行 三種classpath

  • compile,默認(rèn)值,對編譯、測試、運行三種classpath都有效;
  • test: 測試依賴范圍,只對測試classpath有效,在編譯主代碼或者裕興項目的使用是則無法使用此類依賴。
  • provided: 已提供依賴范圍 只在編譯和測試classpath有效,運行時無效。
  • runtime: 運行時依賴范圍,對測試和運行classpath有效,編譯無效;
  • system: 系統(tǒng)依賴范圍,


    4.png

(如第三方給的jar包,且倉庫中心又沒有,可以使用system范圍,如)

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/lib/jsoup-proxy.jar</systemPath>
</dependency>
  • import(Maven 2.0.0及以上):導(dǎo)入依賴范圍。不會對三種classpath產(chǎn)生實際的影響;(不夠嚴(yán)謹(jǐn),類似complie還是什么?)


    5.png

傳遞性依賴

[圖片上傳失敗...(image-592326-1560672958805)]

依賴調(diào)解

兩個依賴關(guān)系
A->B->C->X(1.0)
A->D->X(2.0)
兩個依賴都間接來到X,
maven引用原則(依賴調(diào)解(Dependency Mediation))

  • 第一原則:路徑最緊者優(yōu)先 即 x(2.0)會被使用

A->B->Y(1,0)
A->C->Y(2,0)

  • 第二原則: 在滿足第一原則的前提下第一聲明者優(yōu)先(就近原則) 即 Y(2,0)會被使用

可選依賴

7.png

[圖片上傳失敗...(image-b3618b-1560672958805)]

9.png
10.png

倉庫的布局

12.png

生命周期

  • clean:清理項目


    13.png
  • default: 構(gòu)建項目


    14.png
  • site: 建立項目站點


    16.png
15.png

繼承

正確的設(shè)置relativePath很重要


17.png

可繼承的pom元素


18.png

依賴范圍 import的用法


19.png

插件跟依賴一樣可以使用*Management來管理


20.png

21.png

反應(yīng)堆

22.png
23.png
24.png
25.png

對于裁剪功能,需要用的時候可以查閱文檔

測試

26.png

27.png

跳過測試
mvn package -DskipsTests

28.png
29.png
30.png

注意:上述幾種命令行動態(tài)指定測試類的方法都應(yīng)該只是臨時使用,如果長時間只運行項目的某幾個測試,那么測試就會慢慢失去其本來的意義。

加入測試

31.png

也可以使用excludes排除一些測試


32.png

WEB應(yīng)用

33.png

版本號定義約定


34.png

[圖片上傳失敗...(image-676088-1560672958805)]

Maven屬性

內(nèi)置屬性:

${basedir} 標(biāo)識項目根目錄即包含pom.xml 文件的目錄;
${version}標(biāo)識項目版本;

POM屬性:

  • ${project.artifactId} 對應(yīng)了<project><artifactId>元素的值
  • ${project.build.sourceDirectory} 項目的主源碼目錄 默認(rèn)src/main/java/
  • ${project.build.testSourceDirectory} 項目的測試源碼目錄,默認(rèn)為src/test/java
  • ${project.outputDirectory} 項目主代碼編譯輸出目錄,默認(rèn)為target/classes
  • ${project.testOutputDirectory}: 項目測試代碼編譯輸出目錄 ,默認(rèn)為target/testclasses/
  • ${project.groupId}: 項目的groupId
  • ${project.artifactId} 項目的artifactId
  • ${project.version} 項目的version 與${version}等價
  • ${project.build.finalName} 項目打包輸出文件的名稱,默認(rèn)為${project.artifactId}-${project.version}

自定義屬性

可以通過<properties><xxx>val</xxx></properties>

Setting屬性

36.png

Java屬性變量

[圖片上傳失敗...(image-d9785b-1560672958805)]

環(huán)境變量屬性

38.png

最佳實踐

  • artifactId 使用實際項目名稱作為artifactId的前綴
  • 優(yōu)化依賴: 使用 dependency:listdependency:tree 來查看依賴關(guān)系
  • mvn clean install 在執(zhí)行真正的項目構(gòu)建之前清理項目是一個很好的實踐
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Maven的基本了解 什么是Maven? Maven就是Apache下的一個開源項目。它是用純java開發(fā)的。是一...
    Bcome閱讀 3,144評論 0 7
  • 2018年3月20日14點29分 前言 接著上一篇JSON的文章,我又算是系統(tǒng)的學(xué)習(xí)了一遍Maven吧 之前對Ma...
    天下無敵強閱讀 763評論 0 2
  • 坐標(biāo) maven管理項目依賴的底層基礎(chǔ)-坐標(biāo)。坐標(biāo)元素:groupId、artifactId、version、pa...
    破曉追風(fēng)閱讀 585評論 0 0
  • 姓名:魏浩~公司:杭州龍居門業(yè)有限公司 【日精進打卡第18天】 【知~學(xué)習(xí)】 《六項精進》1遍共1遍 《大學(xué)》1遍...
    A0魏浩富貴龍別墅門閱讀 355評論 0 0
  • 胖嬸和花嬸是多年的街坊鄰里,家境均普通,各育有一女,年齡相仿,都已到出嫁的年紀(jì)。 年初,兩家姑娘就都定下了婚期,時...
    儷米閱讀 494評論 4 6

友情鏈接更多精彩內(nèi)容