zoukankan      html  css  js  c++  java
  • Maven学习总结(5)——聚合与继承

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

    一、聚合

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

    1.1、聚合配置代码

    1 <modules>
    2       <module>模块一</module>
    3       <module>模块二</module>
    4       <module>模块三</module>
    5 </modules>

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

    1 <modules>
    2       <module>../Hello</module>  
    3       <module>../HelloFriend</module>        
    4       <module>../MakeFriends</module>
    5 </modules>

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

    二、继承

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

    2.1、继承配置代码

    1 <parent>  
    2          <groupId>me.gacl.maven</groupId>
    3          <artifactId>ParentProject</artifactId>
    4          <version>0.0.1-SNAPSHOT</version>
    5          <relativePath>../ParentProject/pom.xml</relativePath>  
    6 </parent>

    2.2、继承代码中定义属性

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

    1 <properties>
    2     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    3     <junit.version>4.9</junit.version>
    4     <maven.version>0.0.1-SNAPSHOT</maven.version>
    5 </properties>

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

    1 <dependency>
    2     <groupId>junit</groupId>
    3     <artifactId>junit</artifactId>
    4     <version>${junit.version}</version>
    5     <scope>test</scope>
    6 </dependency>    

    2.3、父模块用dependencyManagement进行管理

    复制代码
     1 <dependencyManagement>
     2     <dependencies>
     3     <dependency>
     4         <groupId>junit</groupId>
     5         <artifactId>junit</artifactId>
     6         <version>${junit.version}</version>
     7         <scope>test</scope>
     8     </dependency>    
     9     <dependency>
    10             <groupId>cn.itcast.maven</groupId>
    11             <artifactId>HelloFriend</artifactId>
    12             <version>${maven.version}</version>
    13             <type>jar</type>
    14             <scope>compile</scope>
    15        </dependency>
    16      </dependencies>
    17 </dependencyManagement>
    复制代码

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

    三、聚合与继承的关系

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

    四、聚合与继承实战演练

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

       

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

      

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

      Parent项目的pom.xml配置

    复制代码
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4 
     5     <groupId>me.gacl.maven</groupId>
     6     <artifactId>Parent</artifactId>
     7     <version>0.0.1-SNAPSHOT</version>
     8     <packaging>pom</packaging>
     9 
    10     <name>Parent</name>
    11     <url>http://maven.apache.org</url>
    12     
    13     <!-- 对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合 -->
    14     <modules>
    15         <module>../Hello</module>
    16         <module>../HelloFriend</module>
    17         <module>../MakeFriends</module>
    18     </modules>
    19     
    20     <!-- 定义属性 -->
    21     <properties>
    22         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    23         <junit.version>4.9</junit.version>
    24         <maven.version>0.0.1-SNAPSHOT</maven.version>
    25     </properties>
    26 
    27     <!-- 用dependencyManagement进行jar包依赖管理 -->
    28     <dependencyManagement>
    29         <!-- 配置jar包依赖 -->
    30         <dependencies>
    31             <dependency>
    32                 <groupId>junit</groupId>
    33                 <artifactId>junit</artifactId>
    34                 <!-- 访问junit.version属性 -->
    35                 <version>${junit.version}</version>
    36                 <scope>test</scope>
    37             </dependency>
    38             <dependency>
    39                 <groupId>me.gacl.maven</groupId>
    40                 <artifactId>Hello</artifactId>
    41                 <!-- 访问maven.version属性 -->
    42                 <version>${maven.version}</version>
    43                 <scope>compile</scope>
    44             </dependency>
    45             <dependency>
    46                 <groupId>me.gacl.maven</groupId>
    47                 <artifactId>HelloFriend</artifactId>
    48                 <!-- 访问maven.version属性 -->
    49                 <version>${maven.version}</version>
    50             </dependency>
    51         </dependencies>
    52     </dependencyManagement>
    53 </project>
    复制代码

      在Hello项目的pom.xml中继承Parent项目的pom.xml配置

    复制代码
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3   
     4   <modelVersion>4.0.0</modelVersion>
     5   <artifactId>Hello</artifactId>
     6   
     7       <!-- 继承Parent项目中的pom.xml配置 -->
     8        <parent>  
     9           <groupId>me.gacl.maven</groupId>
    10          <artifactId>Parent</artifactId>
    11           <version>0.0.1-SNAPSHOT</version>
    12           <!-- 使用相对路径 -->
    13         <relativePath>../Parent/pom.xml</relativePath>  
    14     </parent>
    15     
    16     <dependencies>
    17         <dependency>
    18             <groupId>junit</groupId>
    19             <artifactId>junit</artifactId>
    20         </dependency>
    21     </dependencies>
    22 </project>
    复制代码

      在HelloFriend项目的pom.xml中继承Parent项目的pom.xml配置

    复制代码
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <artifactId>HelloFriend</artifactId>
     5     <name>HelloFriend</name>
     6     
     7     <!-- 继承Parent项目中的pom.xml配置 -->
     8     <parent>
     9         <groupId>me.gacl.maven</groupId>
    10         <artifactId>Parent</artifactId>
    11         <version>0.0.1-SNAPSHOT</version>
    12         <relativePath>../Parent/pom.xml</relativePath>
    13     </parent>
    14     <dependencies>
    15         <dependency>
    16             <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
    17             可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
    18             <groupId>junit</groupId>
    19             <artifactId>junit</artifactId>
    20         </dependency>
    21         <!-- HelloFriend项目中使用到了Hello项目中的类,因此需要添加对Hello.jar的依赖 
    22         Hello.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
    23         因此这里也可以省略不写了
    24         -->
    25         <dependency>
    26             <groupId>me.gacl.maven</groupId>
    27             <artifactId>Hello</artifactId>
    28         </dependency>
    29     </dependencies>
    30 </project>
    复制代码

      在MakeFriends项目的pom.xml中继承Parent项目的pom.xml配置

    复制代码
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <artifactId>MakeFriends</artifactId>
     5     <!-- 继承Parent项目中的pom.xml配置 -->
     6     <parent>
     7         <groupId>me.gacl.maven</groupId>
     8         <artifactId>Parent</artifactId>
     9         <version>0.0.1-SNAPSHOT</version>
    10         <relativePath>../Parent/pom.xml</relativePath>
    11     </parent>
    12     <dependencies>
    13         <dependency>
    14         <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
    15             可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
    16             <groupId>junit</groupId>
    17             <artifactId>junit</artifactId>
    18         </dependency>
    19         <dependency>
    20         <!-- MakeFriends项目中使用到了HelloFriend项目中的类,因此需要添加对HelloFriend.jar的依赖 
    21         HelloFriend.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
    22         因此这里也可以省略不写了
    23         -->
    24             <groupId>me.gacl.maven</groupId>
    25             <artifactId>HelloFriend</artifactId>
    26         </dependency>
    27     </dependencies>
    28 </project>
    复制代码

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

      

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

      

  • 相关阅读:
    算法训练 接水问题
    算法训练 数组排序去重
    算法训练 A+B Problem
    算法训练 采油区域
    算法训练 会议中心
    JS高级
    JS基础操作
    JavaScript入门(基础)
    表格与表单
    音频与视频
  • 原文地址:https://www.cnblogs.com/zhanghaiyang/p/7213609.html
Copyright © 2011-2022 走看看