2019-01-Maven-小總結
阿新 • • 發佈:2019-01-02
- 什麼是Maven?
- 沒有使用Maven的時候是如何管理Jar包的?
- 和Ant相比,Maven中的約定由於配置體現在哪裡?
- https://www.cnblogs.com/itech/archive/2011/11/01/2231837.html
Maven工程的目錄結構必須為如下的結構,這就是約定:
- https://www.cnblogs.com/itech/archive/2011/11/01/2231837.html
- Maven的座標
- groupId:所需Jar包的專案名
- artifactId:所需Jar包的模組名
- version:所需Jar包的版本號
- Maven的結構
- bin-命令
- boot-類載入器框架
- conf-配置
- 區域性配置優先於全域性配置
- 配置優先順序從高到低:pom.xml> user settings > global settings
如果這些檔案同時存在,在應用配置時,會合並它們的內容,如果有重複的配置,優先順序高的配置會覆蓋優先順序低的。
- 配置優先順序從高到低:pom.xml> user settings > global settings
- 區域性配置優先於全域性配置
- lib-依賴包
- maven-model-builder-3.6.0包中的pom檔案定義了約定。
- pom.xml
- groupId 組織機構
- artfactId 功能命名
- version 版本號
- packaging 打包方式 預設jar
- dependencyManagemement
- 只能出現在父pom裡
- 統一版本號
- 宣告(子pom中用到再引用)
- 最佳實踐
- 父pom定義為企業級別或者部門級別控制依賴包版本
- 其他介紹
- 版本管理
- a)1.0-SNAPSHOT
i.repository 刪除
ii.mvn clean package -U (強制拉一次) - b)1.0.0-RELAESE
主版本號.次版本號.增量版本號-<里程碑版本>
- a)1.0-SNAPSHOT
- 常用命令
- compile
- clean
- test
- package
- install
- deploy
- -DskipTests #不執行測試用例,但編譯測試用例類生成相應的 class 檔案至 target/test-classes 下
- -Dmaven.test.skip=true #不執行測試用例,也不編譯測試用例類
- Dependency Scope
- compile,預設值,適用於所有階段,會隨著專案一起釋出。
- provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。
- runtime,只在執行時使用,如JDBC驅動,適用執行和測試階段。
- test,只在測試時使用,用於編譯和執行測試程式碼。不會隨專案釋出。
- system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查詢它。
- 傳遞依賴和排除依賴
- 傳遞依賴:如果我們的專案引用了一個Jar包,而該Jar包又引用了其他Jar包,那麼在預設情況下專案編譯時,Maven會把直接引用和間接引用的Jar包都下載到本地。
- 如何檢視傳遞依賴:mvn dependency:tree > tree.text
- 排除依賴:如果我們只想下載直接引用的Jar包,那麼需要在pom.xml中做以下配置
- 傳遞依賴:如果我們的專案引用了一個Jar包,而該Jar包又引用了其他Jar包,那麼在預設情況下專案編譯時,Maven會把直接引用和間接引用的Jar包都下載到本地。
- Maven預設的依賴處理策略是什麼?
- 最短路徑優先
Maven 面對 D1 和 D2 時,會預設選擇最短路徑的那個 jar 包,即 D2。E->F->D2 比 A->B->C->D1 路徑短 1。 - 最先宣告優先
如果路徑一樣的話, A->B->C1, E->F->C2 ,兩個依賴路徑長度都是 2,那麼就選擇最先宣告。
- 最短路徑優先
- IDEA中使用Maven Helper處理jar包衝突
- Maven常用外掛
- 相關資料:《Maven實戰》