maven(5)坐标和依赖
生活随笔
收集整理的這篇文章主要介紹了
maven(5)坐标和依赖
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README
1)本文部分文字轉自 “maven實戰”,旨在 review ?“maven(5)坐標和依賴” 的相關知識;
【2】坐標詳解? 1)intro:坐標用于定位 類庫,而一組maven 坐標通過一些元素來進行定義的:groupId, artifactId,version, packaging, classifier; 對以上元素的分析(Analysis): A1)groupId:定義當前 maven 項目隸屬的實際項目;maven 項目和 實際項目不是一一對應的,如spring framework是一個實際項目,而 maven 項目有很多如 spring-core, spring-context等; A2)artifactId:定義實際項目中的一個 maven 項目(模塊),使用實際項目名稱作為 artifactId的前綴,以便于尋找實際構件;(其groupId 為spring,而artifaceId 為 spring-aop 或 spring-core?等等?)
A3)packaging:該元素定義 maven 項目的打包方式;打包方式有 jar 和 war ,前者是默認的; A4)classifier:用來幫助定義構建輸出的一些附屬構件。附屬構件 與 主構件 相對應,如主構件 spring-aop-4.2.6.RELEASE.jar ,其附屬構件還可以是?spring-aop-4.2.6.RELEASE-javadoc.jar,spring-aop-4.2.6.RELEASE-sources.jar;(干貨——引入了主構件和附屬構件)
Attention) A1)以上坐標的5個元素:前3個是必須的,而 ?packaging 是可選的,而 classifier 是不能直接定義的; A2)項目構件的文件名和坐標是對應的:規則為 artifactId-version [-classfier].packaging ;
【4】依賴配置 1)intro:其定義如下: <project> ...... <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.7</version><type>....</type> <scope>test</scope><optional>...</optional><exclusions><exclusion>...</exclusion></exclusions></dependency></dependencies> ... </project> 對以上代碼的分析(Analysis): A1)type:是依賴類型 ,默認為jar ,不必聲明; A2)scope:依賴的范圍(test,compile(默認)); A3)optional:標記是否可選; A4)exclusions:用來排除傳遞性依賴;
【5】依賴范圍 1)maven 在編譯項目主代碼的時候需要用到一套 classpath; classpath1)首先:編譯項目主代碼的時候需要用到 spring-core,該文件以依賴的方式被引入到 classpath中; classpath2)其次:maven 在編譯和執行測試的時候會使用另外一套 classpath; classpath3)最后:實際運行maven 項目的時候,又會使用一套 classpath; 2)intro:依賴范圍就是用來控制依賴與這三種classpath(編譯classpath, 測試 classpaht, 運行classpath)的關系,maven 有以下幾種依賴范圍: scope1)compile:編譯依賴范圍 scope2)test:測試依賴范圍: scope3)provided:已提供依賴范圍; scope4)runtime:運行時?依賴范圍; scope5)system:系統依賴范圍;(最好不要使用) scope6)import:導入依賴范圍;
3)上述除了 import以外的各種依賴范圍與 三種classpath 的關系如下表所示:
【6】傳遞性依賴 【6.1】何為傳遞性依賴 1)problem + solution: 1.1)problem:考慮一個基于 spring framework 的項目,如果不使用 maven ,那么在項目中就需要 手動下載相關依賴; 1.2)solution:maven 的 傳遞性依賴就可以很好解決這個問題; 2)看個荔枝:?以 spring mvc 項目為荔枝,其有一個 spring-core-4.2.6.RELEASE.jar 的依賴,而上述jar 還會依賴于 commons-logging-1.2.jar;springmvc 項目依賴于spring-core,而sring-core 依賴于 commons-logging,則 springmvc 項目就傳遞依賴于 commons-logging,則傳遞依賴如下;(干貨——傳遞性依賴的定義)
【6.2】傳遞性依賴和依賴范圍 1)intro:依賴范圍不僅可以控制依賴 與 三種 classpath 的關系,還對傳遞性依賴產生影響; 2)第1直接依賴,第2直接依賴:對于 springmvc項目,spring-core就是第1直接依賴,而?commons-logging 就是 第2直接依賴; 3)第1和第2直接依賴的范圍決定了傳遞性依賴的范圍,如下表所示;最左邊一列表示第1直接依賴范圍,而最上一行表示第2直接依賴范圍,中間的交叉單元格則表示傳遞依賴性范圍;
對上表的分析(Analysis):看第2行,當第1 為 test,第2為compile的時候,其傳遞依賴的范圍是 test;那所以 如果?spring-core ==compile, 而?commons-logging == test(依賴范圍),則?commons-logging?相對于 springmvc 項目的依賴范圍是 test ;
【7】依賴調節 1)intro:當依賴發生沖突時,需要依賴調節; 2)看個荔枝 荔枝1)如項目A 有這樣的依賴關系: A->B->C->X(1.0) AND?A->D->X(2.0),則 依賴調節的第一原則是:路徑最近者優先(長度最短者),所以會選擇 X(2.0); 荔枝2)如項目A 有這樣的依賴關系: A->B->X(1.0) AND?A->D->X(2.0);則依賴調節的第二原則是:第一聲明者優先,在長度相等的case下,在pom 中聲明的順序決定了誰會被使用;(干貨——調節依賴的第一和第二原則)
【8】可選依賴 1)intro:項目A 依賴 項目B,項目B 依賴于 項目X 和 Y,則 B 對于 X 和 Y 都是 可選依賴: A->B AND B->X(OPTIONAL) AND B->Y(OPTIONAL); 2)根據傳遞性依賴的定義,如果這3個依賴的范圍都是 compile,那么 X and Y 就是 A 的 compile 范圍的傳遞性依賴了。然而,由于 X and Y 是 可選依賴,依賴將不會得以傳遞;換句話說,X and Y 將不會對 A 有任何影響;如下圖所示:
3)為什么要使用可選依賴呢?如,B是一個持久層框架包 ,它支持多種數據庫,包括MySQL, oracle,在構建這個 工具包的時候,需要這兩種數據庫的驅動程序,但在使用的時候,只會用到其中一個 驅動程序;項目B的聲明如下:
對以上代碼的分析(Analysis): 因為項目B 依賴的驅動程序 是 可選的,所以當 項目如A 依賴 B 的時候,該驅動程序(項目)的這個依賴將不會傳遞,即項目A 不會依賴 驅動程序這個項目;
Conclusion) C1)在理想case下,是不應該使用可選依賴的。因為在面向對象設計中,有一個 單一職責性原則,指一個類應該只有一個職責,而不是柔和太多的職責; C2)那所以,在上面的case上,就應該 分別為 mysql 和 oracle 創建一個 maven項目,基于同樣的 groupId 不同的 artifactId ,在各自的 pom 中聲明對應的 jdbc 驅動依賴,而不是使用可選依賴;
【9】 最佳實踐 【9.1】排除依賴 1)由于某些原因,不想依賴以前聲明的 maven 項目了; 2)看個荔枝:項目A 依賴 項目B,而不想引入對項目C 的依賴,而是自己顯示地 聲明對于 項目 C1.1.0 版本的依賴;代碼中使用 exclusions 元素聲明排除依賴,exclusions 可以有多個 exclusion 子元素;
3)該實例的邏輯圖如下所示:
【9.2】歸類依賴 1)intro:在某個地方聲明 項目的版本 對 多個項目進行歸類; 2)看個荔枝:關于 springframework項目,
【9.3】優化依賴 1)intro:maven ?會自動解析所有項目的直接依賴和傳遞性依賴,并且根據規則正確判斷每個依賴的范圍,對于一些依賴沖突,maven 也可以進行調節,以確保任何一個構件只有唯一的版本在依賴中存在; 2)已解析依賴:在上述工作做完后,最后得到的那些依賴稱為?已解析依賴;(干貨——引入已解析依賴) 3)可以運行 mvn dependency:list 查看 已解析依賴; D:\classical_books\java_set\maven_in_action\mycode\chapter3>mvn dependency:list [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.maven.chapter3:service:jar:1.0-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 22, column 15 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building service says hello maven. 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ service --- [INFO] [INFO] The following files have been resolved: [INFO] junit:junit:jar:4.7:test [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 7.462 s [INFO] Finished at: 2016-06-18T20:52:40+08:00 [INFO] Final Memory: 13M/153M [INFO] ------------------------------------------------------------------------ 4)依賴樹:這些依賴被解析后,會構成一個 依賴樹,通過這顆樹就可以清楚地看到某個依賴是通過哪條路徑引入的;?(干貨——引入依賴樹) 5)運行 mvn dependency:tree 查看 D:\classical_books\java_set\maven_in_action\mycode\chapter3>mvn dependency:tree [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.maven.chapter3:service:jar:1.0-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 22, column 15 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building service says hello maven. 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ service --- [INFO] com.maven.chapter3:service:jar:1.0-SNAPSHOT [INFO] \- junit:junit:jar:4.7:test // 傳遞性依賴,該項目會傳遞依賴于 junit; [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.172 s [INFO] Finished at: 2016-06-18T20:54:26+08:00 [INFO] Final Memory: 13M/217M [INFO] ------------------------------------------------------------------------ 6)分析當前項目的依賴( mvn dependency:analyze) D:\classical_books\java_set\maven_in_action\mycode\chapter3>mvn dependency:analyze [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.maven.chapter3:service:jar:1.0-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 22, column 15 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building service says hello maven. 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-dependency-plugin:2.8:analyze (default-cli) > test-compile @ service >>> [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ service --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\classical_books\java_set\maven_in_action\mycode\chapter3\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ service --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ service --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\classical_books\java_set\maven_in_action\mycode\chapter3\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ service --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] <<< maven-dependency-plugin:2.8:analyze (default-cli) < test-compile @ service <<< [INFO] [INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ service --- [INFO] No dependency problems found [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.028 s [INFO] Finished at: 2016-06-18T20:56:17+08:00 [INFO] Final Memory: 15M/222M [INFO] ------------------------------------------------------------------------ 對以上console info 的分析(Analysis): A1)Used undeclared dependencies:意指項目中使用到 的,但沒有顯式聲明的依賴; A2)Unused declared dependencies:意指項目中未使用到的,但顯式聲明的依賴;
Attention)由于mvn dependency:analyze 只會分析 編譯主代碼 和 測試代碼需要用到的 依賴,一些執行測試 和 運行時 需要的 依賴它發現不了;
【2】坐標詳解? 1)intro:坐標用于定位 類庫,而一組maven 坐標通過一些元素來進行定義的:groupId, artifactId,version, packaging, classifier; 對以上元素的分析(Analysis): A1)groupId:定義當前 maven 項目隸屬的實際項目;maven 項目和 實際項目不是一一對應的,如spring framework是一個實際項目,而 maven 項目有很多如 spring-core, spring-context等; A2)artifactId:定義實際項目中的一個 maven 項目(模塊),使用實際項目名稱作為 artifactId的前綴,以便于尋找實際構件;(其groupId 為spring,而artifaceId 為 spring-aop 或 spring-core?等等?)
A3)packaging:該元素定義 maven 項目的打包方式;打包方式有 jar 和 war ,前者是默認的; A4)classifier:用來幫助定義構建輸出的一些附屬構件。附屬構件 與 主構件 相對應,如主構件 spring-aop-4.2.6.RELEASE.jar ,其附屬構件還可以是?spring-aop-4.2.6.RELEASE-javadoc.jar,spring-aop-4.2.6.RELEASE-sources.jar;(干貨——引入了主構件和附屬構件)
Attention) A1)以上坐標的5個元素:前3個是必須的,而 ?packaging 是可選的,而 classifier 是不能直接定義的; A2)項目構件的文件名和坐標是對應的:規則為 artifactId-version [-classfier].packaging ;
【4】依賴配置 1)intro:其定義如下: <project> ...... <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.7</version><type>....</type> <scope>test</scope><optional>...</optional><exclusions><exclusion>...</exclusion></exclusions></dependency></dependencies> ... </project> 對以上代碼的分析(Analysis): A1)type:是依賴類型 ,默認為jar ,不必聲明; A2)scope:依賴的范圍(test,compile(默認)); A3)optional:標記是否可選; A4)exclusions:用來排除傳遞性依賴;
【5】依賴范圍 1)maven 在編譯項目主代碼的時候需要用到一套 classpath; classpath1)首先:編譯項目主代碼的時候需要用到 spring-core,該文件以依賴的方式被引入到 classpath中; classpath2)其次:maven 在編譯和執行測試的時候會使用另外一套 classpath; classpath3)最后:實際運行maven 項目的時候,又會使用一套 classpath; 2)intro:依賴范圍就是用來控制依賴與這三種classpath(編譯classpath, 測試 classpaht, 運行classpath)的關系,maven 有以下幾種依賴范圍: scope1)compile:編譯依賴范圍 scope2)test:測試依賴范圍: scope3)provided:已提供依賴范圍; scope4)runtime:運行時?依賴范圍; scope5)system:系統依賴范圍;(最好不要使用) scope6)import:導入依賴范圍;
3)上述除了 import以外的各種依賴范圍與 三種classpath 的關系如下表所示:
【6】傳遞性依賴 【6.1】何為傳遞性依賴 1)problem + solution: 1.1)problem:考慮一個基于 spring framework 的項目,如果不使用 maven ,那么在項目中就需要 手動下載相關依賴; 1.2)solution:maven 的 傳遞性依賴就可以很好解決這個問題; 2)看個荔枝:?以 spring mvc 項目為荔枝,其有一個 spring-core-4.2.6.RELEASE.jar 的依賴,而上述jar 還會依賴于 commons-logging-1.2.jar;springmvc 項目依賴于spring-core,而sring-core 依賴于 commons-logging,則 springmvc 項目就傳遞依賴于 commons-logging,則傳遞依賴如下;(干貨——傳遞性依賴的定義)
【6.2】傳遞性依賴和依賴范圍 1)intro:依賴范圍不僅可以控制依賴 與 三種 classpath 的關系,還對傳遞性依賴產生影響; 2)第1直接依賴,第2直接依賴:對于 springmvc項目,spring-core就是第1直接依賴,而?commons-logging 就是 第2直接依賴; 3)第1和第2直接依賴的范圍決定了傳遞性依賴的范圍,如下表所示;最左邊一列表示第1直接依賴范圍,而最上一行表示第2直接依賴范圍,中間的交叉單元格則表示傳遞依賴性范圍;
對上表的分析(Analysis):看第2行,當第1 為 test,第2為compile的時候,其傳遞依賴的范圍是 test;那所以 如果?spring-core ==compile, 而?commons-logging == test(依賴范圍),則?commons-logging?相對于 springmvc 項目的依賴范圍是 test ;
【7】依賴調節 1)intro:當依賴發生沖突時,需要依賴調節; 2)看個荔枝 荔枝1)如項目A 有這樣的依賴關系: A->B->C->X(1.0) AND?A->D->X(2.0),則 依賴調節的第一原則是:路徑最近者優先(長度最短者),所以會選擇 X(2.0); 荔枝2)如項目A 有這樣的依賴關系: A->B->X(1.0) AND?A->D->X(2.0);則依賴調節的第二原則是:第一聲明者優先,在長度相等的case下,在pom 中聲明的順序決定了誰會被使用;(干貨——調節依賴的第一和第二原則)
【8】可選依賴 1)intro:項目A 依賴 項目B,項目B 依賴于 項目X 和 Y,則 B 對于 X 和 Y 都是 可選依賴: A->B AND B->X(OPTIONAL) AND B->Y(OPTIONAL); 2)根據傳遞性依賴的定義,如果這3個依賴的范圍都是 compile,那么 X and Y 就是 A 的 compile 范圍的傳遞性依賴了。然而,由于 X and Y 是 可選依賴,依賴將不會得以傳遞;換句話說,X and Y 將不會對 A 有任何影響;如下圖所示:
3)為什么要使用可選依賴呢?如,B是一個持久層框架包 ,它支持多種數據庫,包括MySQL, oracle,在構建這個 工具包的時候,需要這兩種數據庫的驅動程序,但在使用的時候,只會用到其中一個 驅動程序;項目B的聲明如下:
對以上代碼的分析(Analysis): 因為項目B 依賴的驅動程序 是 可選的,所以當 項目如A 依賴 B 的時候,該驅動程序(項目)的這個依賴將不會傳遞,即項目A 不會依賴 驅動程序這個項目;
Conclusion) C1)在理想case下,是不應該使用可選依賴的。因為在面向對象設計中,有一個 單一職責性原則,指一個類應該只有一個職責,而不是柔和太多的職責; C2)那所以,在上面的case上,就應該 分別為 mysql 和 oracle 創建一個 maven項目,基于同樣的 groupId 不同的 artifactId ,在各自的 pom 中聲明對應的 jdbc 驅動依賴,而不是使用可選依賴;
【9】 最佳實踐 【9.1】排除依賴 1)由于某些原因,不想依賴以前聲明的 maven 項目了; 2)看個荔枝:項目A 依賴 項目B,而不想引入對項目C 的依賴,而是自己顯示地 聲明對于 項目 C1.1.0 版本的依賴;代碼中使用 exclusions 元素聲明排除依賴,exclusions 可以有多個 exclusion 子元素;
3)該實例的邏輯圖如下所示:
【9.2】歸類依賴 1)intro:在某個地方聲明 項目的版本 對 多個項目進行歸類; 2)看個荔枝:關于 springframework項目,
【9.3】優化依賴 1)intro:maven ?會自動解析所有項目的直接依賴和傳遞性依賴,并且根據規則正確判斷每個依賴的范圍,對于一些依賴沖突,maven 也可以進行調節,以確保任何一個構件只有唯一的版本在依賴中存在; 2)已解析依賴:在上述工作做完后,最后得到的那些依賴稱為?已解析依賴;(干貨——引入已解析依賴) 3)可以運行 mvn dependency:list 查看 已解析依賴; D:\classical_books\java_set\maven_in_action\mycode\chapter3>mvn dependency:list [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.maven.chapter3:service:jar:1.0-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 22, column 15 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building service says hello maven. 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ service --- [INFO] [INFO] The following files have been resolved: [INFO] junit:junit:jar:4.7:test [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 7.462 s [INFO] Finished at: 2016-06-18T20:52:40+08:00 [INFO] Final Memory: 13M/153M [INFO] ------------------------------------------------------------------------ 4)依賴樹:這些依賴被解析后,會構成一個 依賴樹,通過這顆樹就可以清楚地看到某個依賴是通過哪條路徑引入的;?(干貨——引入依賴樹) 5)運行 mvn dependency:tree 查看 D:\classical_books\java_set\maven_in_action\mycode\chapter3>mvn dependency:tree [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.maven.chapter3:service:jar:1.0-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 22, column 15 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building service says hello maven. 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ service --- [INFO] com.maven.chapter3:service:jar:1.0-SNAPSHOT [INFO] \- junit:junit:jar:4.7:test // 傳遞性依賴,該項目會傳遞依賴于 junit; [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.172 s [INFO] Finished at: 2016-06-18T20:54:26+08:00 [INFO] Final Memory: 13M/217M [INFO] ------------------------------------------------------------------------ 6)分析當前項目的依賴( mvn dependency:analyze) D:\classical_books\java_set\maven_in_action\mycode\chapter3>mvn dependency:analyze [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.maven.chapter3:service:jar:1.0-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 22, column 15 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building service says hello maven. 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-dependency-plugin:2.8:analyze (default-cli) > test-compile @ service >>> [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ service --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\classical_books\java_set\maven_in_action\mycode\chapter3\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ service --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ service --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\classical_books\java_set\maven_in_action\mycode\chapter3\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ service --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] <<< maven-dependency-plugin:2.8:analyze (default-cli) < test-compile @ service <<< [INFO] [INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ service --- [INFO] No dependency problems found [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.028 s [INFO] Finished at: 2016-06-18T20:56:17+08:00 [INFO] Final Memory: 15M/222M [INFO] ------------------------------------------------------------------------ 對以上console info 的分析(Analysis): A1)Used undeclared dependencies:意指項目中使用到 的,但沒有顯式聲明的依賴; A2)Unused declared dependencies:意指項目中未使用到的,但顯式聲明的依賴;
Attention)由于mvn dependency:analyze 只會分析 編譯主代碼 和 測試代碼需要用到的 依賴,一些執行測試 和 運行時 需要的 依賴它發現不了;
總結
以上是生活随笔為你收集整理的maven(5)坐标和依赖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高歌曼舞的意思 高歌曼舞什么意思
- 下一篇: maven(6)仓库