1. 程式人生 > 其它 >3. maven的依賴原則

3. maven的依賴原則

技術標籤:maven

查閱了網路上,很多的資料。重點的地方,大家寫的都挺好。但是細節的地方,都沒有人寫,導致不知道具體到底是怎麼回事。

接下來,我們就現場測試一下,動動手,瞭解的更深刻一些。

先準備3個專案,每個專案依賴關係如下:

    2. service專案 依賴util-two
             <dependencies>
                 <dependency>
                     <groupId>com.wqm</groupId>
                     <artifactId>util-two</artifactId>
                     <version>1.0-SNAPSHOT</version>
                 </dependency>
             </dependencies>

    3. util-one專案 依賴log4j:1.1.3
            <dependencies>
               <dependency>
                   <groupId>log4j</groupId>
                   <artifactId>log4j</artifactId>
                   <version>1.1.3</version>
               </dependency>
            </dependencies>

    4. util-two專案 依賴log4j:1.2.17
            <dependencies>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.17</version>
                </dependency>
            </dependencies>

原則一:最短路徑優先(依賴關係最短的優先) 最終,檢視controller專案依賴的情況

    1. controller專案 同時依賴util-one 和 service
            <dependencies>
                <dependency>
                    <groupId>com.wqm</groupId>
                    <artifactId>util-one</artifactId>
                    <version>1.0-SNAPSHOT</version>
                </dependency>
                <dependency>
                    <groupId>com.wqm</groupId>
                    <artifactId>service</artifactId>
                    <version>1.0-SNAPSHOT</version>
                </dependency>
            </dependencies>

最終結果:log4j:1.2.17未被依賴

原則二:距離相同時,先宣告者優先(先在pom.xml檔案宣告的優先)最終,檢視controller專案依賴的情況

1. controller專案 同時依賴util-one 和 util-two
  <dependencies>
        <dependency>
            <groupId>com.wqm</groupId>
            <artifactId>util-one</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.wqm</groupId>
            <artifactId>util-two</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

原則三:多次只引不同版本的jar時,使用最後宣告的版本最終,檢視controller專案依賴的情況

    1. 當controller
            <dependencies>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.1.3</version>
                </dependency>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.17</version>
                </dependency>
            </dependencies>

到這裡,就測試完畢了。