Maven多項目繼承:dependencyManagement scope=import


   maven的多項目結構中,可以使用parent定義起父項目,從而從父項目中繼承依賴等屬性。但是美中不足,maven只能單繼承,即一個項目只能使用parent標簽定一個父級項目。

maven2.9之后的版本引入了一個新的功能,可以實現依賴上的多繼承。這個功能,可以將依賴配置復雜的pom文件拆分成多個獨立的pom文件,一是可以使maven的pom配置更加簡潔,

另一個是,可以復用這些pom依賴。

這一點可以參考springboot的maven配置:

 

<dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <version>1.5.3.RELEASE</version>
      </dependency>

 

如上面這一行依賴就可以構建一個完整的springbootweb項目,實際上這行依賴簡介包含了許多個依賴,如spring核心的幾大依賴包等等。而springboot能做到這一點就是利用了這個新功能。

 

接下來說如何使用這個新功能:

1. 首先需要單獨編輯一個pom文件,定義需要的依賴,作為可被直接引用的依賴:

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xuzimian.global.demo</groupId>
    <artifactId>spring-core</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <spring.version>4.3.9.RELEASE</spring.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- 添加Spring依賴的jar包-->
            <!--依賴注入包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!--切片包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- Beans包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- 容器包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- 容器依賴包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- 核心包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- 表達式包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

 

注意:依賴只能放在dependencyManagement中,如果需要被多繼承的話。

2. 在需要引用的項目pom文件中,加入對上面的pom引用:

 

 <dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>com.xuzimian.global.demo</groupId>
               <artifactId>spring-core</artifactId>
               <version>1.0-SNAPSHOT</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
    </dependencyManagement>

 

注意:scope必須是import

3. 將第一步中的單獨pom文件,存放到本地或者遠程maven倉庫的對應目錄下:

注意:該pom文件的命名必須符合{artifactId}.{version}.pom 格式,如果本地或者遠程倉庫上沒有這個對應的pom文件,則執行mvn命令時就會出現如下錯誤:

Non-resolvable import POM: Could not transfer artifact

經過上面1,3兩步之后,就可以在任何項目里面使用

 <dependencyManagement>

       <dependencies>
           <dependency>
               <groupId>com.xuzimian.global.demo</groupId>
               <artifactId>spring-core</artifactId>
               <version>1.0-SNAPSHOT</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
    </dependencyManagement>
這一段配置引入第一步的獨立pom文件的所有spring依賴了,當然,也可以配置多個獨立的pom,在項目中使用多個繼承依賴。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM