1. 程式人生 > 實用技巧 >Maven中的關係

Maven中的關係

Maven中的關係

繼承

一個Maven專案可以繼承另一個Maven專案,分別稱為子專案、父專案

場景:多個子專案中使用的是相同的依賴或外掛,此時可以把相同的配置抽取到一個父專案中,進行統一的管理,保持一致性

步驟:

  1. 將父專案的打包方式設定為pom

    <!--
        打包方式:
        jar:Java專案的打包方式:預設值
        war:Web專案的打包方式
        pom:父專案的打包方式-->
        <packaging>jar</packaging>
    
  2. 在子專案中引用父專案,指定父專案的座標

    <!--  引用父專案,指定父專案的座標-->
        <parent>
            <groupId>org.example</groupId>
            <artifactId>parent</artifactId>
            <version>1.0-SNAPSHOT</version>
              <!--  指定父專案的pom.xml檔案的相對物理路徑-->
            <relativePath>xx/xx/</relativePath>
        </parent>
    
    

問題:有時並不是父專案的所有依賴都需要被專案繼承,但是又希望能夠通過父專案對依賴進行統一管理,如版本的控制

解決:使用dependencyManagement標籤

步驟:

  1. 在父專案中配置dependencyManagement

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.ljy</groupId>
                <artifactId>mysql..</artifactId>
                <version>12.52.</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. 在子專案中引用父專案中的依賴、

<dependencies>
    <dependency>
        <groupId>com.ljy</groupId>
        <artifactId>mysql..</artifactId>
    </dependency>
</dependencies>

聚合

將多個子專案新增到一個父專案中,然後通過對父專案進行操作,從而實現對所有聚合的子專案的操作

在父專案的pom中

<!--    聚合子專案,指定子專案的根目錄-->
 <modules>
     <module>../...</module>
     <module>../...</module>
 </modules>

依賴(繼承)

專案C-->專案B-->專案A

概念:如果專案C依賴於專案B,專案B依賴專案A,則專案C也依賴於專案A,這叫依賴的傳遞

配置依賴關係:

<!--  依賴於其他子專案child01-->
        <dependency>
            <groupId>com.ljy</groupId>
            <artifactId>child01</artifactId>
            <version>xx</version>
        </dependency>

控制依賴的傳遞

並不是所有的依賴都會被傳遞

  • scope為compile的依賴會傳遞
  • scope為test的依賴不會被傳遞
  • 配置optional為true的依賴不會被傳遞(不能寫在父專案中)
<dependency>
    <groupId>com.ljy</groupId>
    <artifactId>lof3</artifactId>
    <optional>true</optional>
</dependency>

不會出現jar包的衝突

使用Maven不會出現jar包衝突,通過兩個原則來保證:

  • 就近原則
  • 優先定義原則(看是哪個依賴先寫,02與01的先後順序)
       <dependency>
            <groupId>com.ljy</groupId>
            <artifactId>child01</artifactId>
            <version>xx</version>
        </dependency>
       <dependency>
            <groupId>com.ljy</groupId>
            <artifactId>child02</artifactId>
            <version>xx</version>
        </dependency>

不要傳遞的依賴

方式1:在依賴的配置中配置不允許傳遞

<optional>true</optional>

方式2:在當前的專案中配置不接收傳遞的特定依賴

<dependency>
   <!-- 不接收特定的依賴 --> 
<exclusions>
 <exclusion>
    <groupId>xxx</groupId>
    <artifacdId>xxx</artifacdId>
 </exclusion>
</exclusions>
</dependency>