1. 首页
  2. maven学习总结

Maven学习总结(五)——聚合与继承

一、聚合

如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合

1.1、聚合配置代码

 <modules>
       <module>模块一</module>
       <module>模块二</module>
       <module>模块三</module>
 </modules>

例如:对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合

 <modules>
       <module>../Hello</module>
       <module>../HelloFriend</module>
       <module>../MakeFriends</module>
 </modules>

其中module的路径为相对路径。

二、继承

继承为了消除重复,我们把很多相同的配置提取出来,例如:grouptId,version等

2.1、继承配置代码

 <parent>
          <groupId>me.gacl.maven</groupId>
          <artifactId>ParentProject</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <relativePath>../ParentProject/pom.xml</relativePath>
 </parent>

2.2、继承代码中定义属性

继承代码过程中,可以定义属性,例如:

 <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <junit.version>4.9</junit.version>
     <maven.version>0.0.1-SNAPSHOT</maven.version>
 </properties>

访问属性的方式为${junit.version},例如:

 <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>${junit.version}</version>
     <scope>test</scope>
 </dependency>

2.3、父模块用dependencyManagement进行管理

 <dependencyManagement>
     <dependencies>
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>${junit.version}</version>
         <scope>test</scope>
     </dependency>
     <dependency>
             <groupId>cn.itcast.maven</groupId>
             <artifactId>HelloFriend</artifactId>
             <version>${maven.version}</version>
             <type>jar</type>
             <scope>compile</scope>
        </dependency>
      </dependencies>
 </dependencyManagement>

这样的好处是子模块可以有选择行的继承,而不需要全部继承。

三、聚合与继承的关系

聚合主要为了快速构建项目,继承主要为了消除重复

四、聚合与继承实战演练

创建四个Maven项目,如下图所示:

exizongjiewujuheyujicheng_1.png

这四个项目放在同一个目录下,方便后面进行聚合和继承

exizongjiewujuheyujicheng_2.png

Parent项目是其它三个项目的父项目,主要是用来配置一些公共的配置,其它三个项目再通过继承的方式拥有Parent项目中的配置,首先配置Parent项目的pom.xml,添加对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合以及jar包依赖,pom.xml的配置信息如下:

Parent项目的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>me.gacl.maven</groupId>
     <artifactId>Parent</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <packaging>pom</packaging>

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

     <!-- 对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合 -->
     <modules>
         <module>../Hello</module>
         <module>../HelloFriend</module>
         <module>../MakeFriends</module>
     </modules>

     <!-- 定义属性 -->
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <junit.version>4.9</junit.version>
         <maven.version>0.0.1-SNAPSHOT</maven.version>
     </properties>

     <!-- 用dependencyManagement进行jar包依赖管理 -->
     <dependencyManagement>
         <!-- 配置jar包依赖 -->
         <dependencies>
             <dependency>
                 <groupId>junit</groupId>
                 <artifactId>junit</artifactId>
                 <!-- 访问junit.version属性 -->
                 <version>${junit.version}</version>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>me.gacl.maven</groupId>
                 <artifactId>Hello</artifactId>
                 <!-- 访问maven.version属性 -->
                 <version>${maven.version}</version>
                 <scope>compile</scope>
             </dependency>
             <dependency>
                 <groupId>me.gacl.maven</groupId>
                 <artifactId>HelloFriend</artifactId>
                 <!-- 访问maven.version属性 -->
                 <version>${maven.version}</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
 </project>

在Hello项目的pom.xml中继承Parent项目的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>
   <artifactId>Hello</artifactId>

       <!-- 继承Parent项目中的pom.xml配置 -->
        <parent>
           <groupId>me.gacl.maven</groupId>
          <artifactId>Parent</artifactId>
           <version>0.0.1-SNAPSHOT</version>
           <!-- 使用相对路径 -->
         <relativePath>../Parent/pom.xml</relativePath>
     </parent>

     <dependencies>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
     </dependencies>
 </project>

在HelloFriend项目的pom.xml中继承Parent项目的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>
     <artifactId>HelloFriend</artifactId>
     <name>HelloFriend</name>

     <!-- 继承Parent项目中的pom.xml配置 -->
     <parent>
         <groupId>me.gacl.maven</groupId>
         <artifactId>Parent</artifactId>
         <version>0.0.1-SNAPSHOT</version>
         <relativePath>../Parent/pom.xml</relativePath>
     </parent>
     <dependencies>
         <dependency>
             <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
             可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
         <!-- HelloFriend项目中使用到了Hello项目中的类,因此需要添加对Hello.jar的依赖
         Hello.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
         因此这里也可以省略不写了
         -->
         <dependency>
             <groupId>me.gacl.maven</groupId>
             <artifactId>Hello</artifactId>
         </dependency>
     </dependencies>
 </project>

在MakeFriends项目的pom.xml中继承Parent项目的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>
     <artifactId>MakeFriends</artifactId>
     <!-- 继承Parent项目中的pom.xml配置 -->
     <parent>
         <groupId>me.gacl.maven</groupId>
         <artifactId>Parent</artifactId>
         <version>0.0.1-SNAPSHOT</version>
         <relativePath>../Parent/pom.xml</relativePath>
     </parent>
     <dependencies>
         <dependency>
         <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
             可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
         <dependency>
         <!-- MakeFriends项目中使用到了HelloFriend项目中的类,因此需要添加对HelloFriend.jar的依赖
         HelloFriend.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
         因此这里也可以省略不写了
         -->
             <groupId>me.gacl.maven</groupId>
             <artifactId>HelloFriend</artifactId>
         </dependency>
     </dependencies>
 </project>

以上的四个项目的pom.xml经过这样的配置之后,就完成了在Parent项目中聚合Hello、HelloFriend、MakeFriends这三个子项目(子模块),而Hello、HelloFriend、MakeFriends这三个子项目(子模块)也继承了Parent项目中的公共配置,这样就可以使用Maven一次性构建所有的项目了,如下图所示:

exizongjiewujuheyujicheng_3.png

选中Parent项目的pom.xml文件→【Run As】→【Maven install】,这样Maven就会一次性同时构建Parent、Hello、HelloFriend、MakeFriends这四个项目,如下图所示:

exizongjiewujuheyujicheng_4.png

作者:孤傲苍狼

来源:https://www.cnblogs.com/xdp-gacl/p/4058008.html

JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

标题:Maven学习总结(五)——聚合与继承

链接:https://www.javajike.com/article/1806.html

« Maven学习总结(六)——Maven与Eclipse整合
Maven学习总结(二)——Maven项目构建过程练习»

相关推荐

QR code