Maven 父子項目

1、創建父項目

cmd進入項目工作目錄,執行以下代碼:

mvn archetype:generate

 創建成功,接着修改pom.xml如下:

<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>testparentgroupid</groupId>
  <artifactId>testparentartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>testparentartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

注:修改packageing打包方式爲pom,父項目的packageing設置爲pom,才能去管理其他工程.

 

2、父項目創建子項目

cmd進入父項目pom.xml所在的目錄,執行構建代碼如下:

mvn archetype:generate

 子項目創建成功,此時Maven修改了父項目的pom.xml內容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>testparentgroupid</groupId>
  <artifactId>testparentartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>testparentartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
<modules>  <module>testchild1artifactId</module>
  </modules>
</project>

新增了modles節點,將子項目包含到了裏面.建立了父項目與子項目的關聯.通過modles節點,子項目的pom.xml內容如下:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>testparentgroupid</groupId>
    <artifactId>testparentartifactId</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>testchild1groupId</groupId>
  <artifactId>testchild1artifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>testchild1artifactId</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

可以看到新生成了一個parent節點,Maven自動建立了子項目父項目的關聯通過parent節點.

注:如果子項目和父項目的groupId和version一樣,一般情況下是一樣的.這兩個屬性可以刪除,只保留artifactId,所以修改子項目pom如下:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>testparentgroupid</groupId>
    <artifactId>testparentartifactId</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <artifactId>testchild1artifactId</artifactId>
  <name>testchild1artifactId</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

到這裏,父子項目已經建立了關聯

 

3、父項目管理所有依賴信息

修改父項目的pom.xml,如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>testparentgroupid</groupId>
  <artifactId>testparentartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>testparentartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  
  <modules>  
    <module>testchild1artifactId</module>
  </modules>
</project>

父項目通過dependencyManagement節點引入了一系列的sping框架依賴.注意這裏只是一個列表而已,不會真正的去下載這些依賴.可以通過cmd進入父項目的pom.xml,執行如下代碼:

mvn dependency:list

可以發現父項目沒有去執行任何下載包的操作

修改子項目的pom.xml如下:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>tpgroupId</groupId>
    <artifactId>tpartifactId</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>tpchild1groupId</groupId>
  <artifactId>tpchild1artifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>tpchild1artifactId</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
 <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
      </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

這裏添加了spring-aop的依賴.因爲本地maven倉庫和相關倉庫沒有,所以如下圖

 執行了相關下載.同時在切換爲父項目查看依賴,cmd進入父項目的pom.xml目錄,執行如下代碼:

mvn dependency:list

 父項目依然沒有依賴.

 

到這裏,可以菜刀父項目提供了一個依賴列表,其提供了依賴默認的版本,可以在子項目中不指定依賴的版本,而採用父項目的版本,因爲上面的子項目並沒有指定spring-aop的具體版本,但是卻下載了父項目中的spring-aop的版本.所以pom項目有一定的版本管理功能,version遵循以下規律:

(1)、父項目已經引入的依賴,子項目可以不用寫version ,此時子項目採用父項目的version

(2)、如果子項目寫了version和父項目的version不一致,採用子項目的version

 

4、查看子項目的依賴層級

cmd進入指定子項目的pom.xml,執行如下代碼:

mvn dependency:tree

 

5、父項目升級管理的所有依賴項的版本

修改父項目的pom.xml如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>tpgroupId</groupId>
  <artifactId>tpartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>tpartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <modules>
    <module>tpchild1artifactId</module>
  </modules>
</project>

升級spring相關項目的版本到4.1.0,接着cmd進入子項目的pom.xml所在的目錄執行如下代碼:

mvn dependency:list

 可以看到下載了4.1.0相關的包,依賴解析結果也顯示升級到了4.1.0相關的版本,再看下本地Maven倉庫

 4.0.0和4.1.0都存在於倉庫中

 

6、父子項目添加自定義屬性,控制pom中的相關配置

修改父項目pom.xml如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>tpgroupId</groupId>
  <artifactId>tpartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>tpartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <custome.spring.version>4.2.0.RELEASE</custome.spring.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <modules>
    <module>tpchild1artifactId</module>
  </modules>
</project>

這裏在properties節點下新增了custome.spring.version節點,並修改了依賴列表中所有spring相關項目的version節點爲 <version>${custome.spring.version}</version>

接着cmd定位到父項目所在的pom.xml,執行如下代碼:

mvn dependency:list

 可以看到子項目開始下載4.2.0版本的相關包.說明自定義屬性配置成功,這裏也可以在子項目的pom.xml中配置自定義屬性.並不是只能在父項目中配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章