<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                轉:[https://blog.csdn.net/u014297148/article/details/79935428](https://blog.csdn.net/u014297148/article/details/79935428) ## 1.依賴范圍 依賴包參與范圍:編譯、測試、打包、安裝、部署 想必大家在maven的pom.xml文件中 定義依賴 除了 groupId ,artifactId,version三個必要的標簽外,還見過 另外一個標簽scope(如下)。沒錯這個標簽就是我下面要說的依賴范圍。 ``` <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> ``` 其實maven中的依賴范圍有很多種,但是我們常用的只有以下三種,我們掌握這三種就夠用了。他們分別是 **compile (編譯)范圍**依賴,**test(測試)依賴**,**provided依賴**。那問題來了我們在定義依賴的時候 這個scope 該怎么填呢?我們先講一下判定規則: ![](https://img.kancloud.cn/25/83/25838f62b8d0dfd059fe0f0efd50a8fc_1006x165.png) 1. 是否對main主程序有效(寫代碼時) 2. 是否對test測試程序有效(寫測試程序時) 3. 是否參與打包(package或install) 4. 是否參與部署(deploy) 其實可以把這三個依賴分為兩種情況 針對程序結構(分主程序和測試程序)的依賴 我們在前面就講過 maven project 遵循著一定目錄結構 ![](https://box.kancloud.cn/55252a2a9857b385553f5c443e2219e2_567x160.png) **1.complie** **complie 編譯范圍的依賴** (默認,典型例子 spring-core 對main和test都有效,參與打包參與部署) ``` <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.6.RELEASE</version> </dependency> ``` ![](https://box.kancloud.cn/d5fd618a279ca7e929772433b94894b9_391x242.png) **2.test** **test 測試范圍的依賴** (典型例子junit 只對test有效,不參與打包參與部署) ``` <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> ``` **3.provided** 針對開發過程的依賴 provided 范圍的依賴(典型例子servlet-api 在開發過程中必須提供(添加tomcat運行時環境/添加maven依賴),打包過程中忽略,運行時有servlet容器提供) 參與編譯與測試,不參與打包與部署(打成jar包時,不包含此依賴),如@ConditionOnClass注解,編譯時可以通過 ``` <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>servlet-api</artifactId> <version>6.0.32</version> </dependency> ``` ![](https://box.kancloud.cn/7cec63df5a48e834f630ee240016ddf3_539x234.png) ## 2.依賴傳遞 為了證明依賴會傳遞我分別建了一個A模塊 依賴junit 和spring-core;B模塊依賴junit和A模塊如下: ![](https://box.kancloud.cn/4e318fff18811c4157b21fa956e3f7b6_605x571.png) ![](https://box.kancloud.cn/c7914a859aaa299e013b211106ed2388_640x539.png) 我們用idea的依賴樹來看下 A模塊,B模塊這兩個模塊的依賴關系樹: 先是A模塊的 dependency tree ![](https://box.kancloud.cn/d23d468067acfd3d42aa0dfb8fecb6bc_1011x409.png) 再是B模塊的關系樹 dependcy tree ![](https://box.kancloud.cn/5ea30eb8d9f02899cde80a95ebf16f4c_1010x406.png) 從B的pom.xml 代碼中,我們可以看出 B模塊在pom.xml文件中并沒有直接的配置Spring-core的依賴,但是從B的依賴關系樹種我們可以看出B也依賴了spring-core,只是這個依賴關系是因為 A依賴了spring-core ,而B又依賴了A所以 B也間接的依賴了spring-core因此可以得出一個結論: 依賴可以相互之間傳遞 3.依賴排除 在某些情況下我們可能需要依賴某個a.jar,但又不想間接依賴這個a.jar所依賴的jar包,這時我們可以采用exclusion 來排除某個依賴。 如下: ``` <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.6.RELEASE</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> ``` 4.依賴原則 我們在工作中的項目都是分模塊的,而且模塊之間又互相依賴,這個時候我們可能會引入相同的依賴 ,這時maven取那個依賴呢?這就是maven依賴的原則: 路徑不同間接依賴中maven采用的是路徑最短者優先 路徑相同間接依賴中maven 采用的是依賴定義順序從上到下 我們可以通過以下來驗證這兩個依賴原則的正確性,定義一個A模塊分別依賴junit 與spring-core-4.2.7; 定義一個B模塊 依賴與junit與A模塊 與spring-core-4.3.7;定義一個C模塊分別依賴junit與B;定義一個D模塊 分別依賴A模塊與C模塊。然后根據 C模塊與D模塊最后依賴的spring-core的版本來驗證上述兩個依賴原則。 A模塊 ![](https://box.kancloud.cn/856d69ddf30c257294b5c71f555af494_984x521.png) B模塊 ![](https://box.kancloud.cn/a3cc64b5b5b6b180301e1f80652f4962_995x571.png) C模塊 ![](https://box.kancloud.cn/39989ef708918f22d2c4dbbcf8f34c62_989x505.png) 根據C模塊的依賴關系樹 如下 ![](https://box.kancloud.cn/38c5914273e7ebdf8d1932a53b6942c1_1081x444.png) D模塊則分兩種情況: 1.B模塊先定義與 ``` <dependencies> <dependency> <groupId>com.javxuam.maven</groupId> <artifactId>B</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.javxuam.maven</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> ``` ![](https://box.kancloud.cn/07652b295f562e32bdb720176b1834b3_1105x368.png) A依賴定義優先B依賴 ``` <dependencies> <dependency> <groupId>com.javxuam.maven</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.javxuam.maven</groupId> <artifactId>B</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> ``` ![](https://box.kancloud.cn/2ed0fe5c12ed4f07cc774d7534681802_1098x407.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看