天天看点

maven使用总结(三)继承聚合父pom的配置

本篇博客我们接着讲maven的第三个好处,统一的管理项目信息:

- 我们可以使我们的pom文件直接继承超级pom文件,当然我们也可以继承我们自己的pom文件,这时我们可以更方便的对项目进行统一管理。当然了解这些之前我们还是要掌握一些基本的知识——继承和聚合

- 要说项目的依赖就不得不说pom的继承了,在前面的博客我也有涉及到继承的东西,下面我们详细的说一下项目中的继承。

继承

被继承项目与继承项目是父子目录关系

<modelVersion>4.0.0</modelVersion>
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>  
</project>
           
  • 然后我们有另一个项目projectB,而且projectB是跟projectA的pom.xml文件处于同一个目录下,这时候如果projectB需要继承自projectA的话我们可以这样定义projectB的pom.xml文件。
<parent>
    <groupId>com.tiantian.mavenTest</groupId>
    <artifactId>projectA</artifactId>  
    <version>1.0-SNAPSHOT</version>
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>
  <artifactId>projectB</artifactId>
  <packaging>jar</packaging> 
  <version>1.0-SNAPSHOT</version> 
</project>
           
  • 个Maven项目时,我们需要在自己的pom.xml中定义一个parent元素,在这个元素中指明需要继承项目的groupId、artifactId和version。
  • 当被继承项目与继承项目的目录结构不是父子关系的时候,我们再利用上面的配置是不能实现Maven项目的继承关系的,这个时候我们就需要在子项目的pom.xml文件定义中的parent元素下再加上一个relativePath元素的定义,用以描述父项目的pom.xml文件相对于子项目的pom.xml文件的位置。
  • 假设我们现在还是有上面两个项目,projectA和projectB,projectB还是继承自projectA,但是现在projectB不在projectA的子目录中,而是与projectA处于同一目录中。这个时候projectA和projectB的目录结构如下:
------projectA

              ------pom.xml

  ------projectB

              ------pom.xml
           
  • 这个时候我们可以看出projectA的pom.xml相对于projectB的pom.xml的位置是“../projectA/pom.xml”,所以这个时候projectB的pom.xml的定义应该如下所示:
parent>  
    <groupId>com.tiantian.mavenTest</groupId> 
    <artifactId>projectA</artifactId> 
    <version>1.0-SNAPSHOT</version> 
       <relativePath>../projectA/pom.xml</relativePath>
  </parent>  
  <modelVersion>4.0.0</modelVersion> 
  <groupId>com.tiantian.mavenTest</groupId>
  <artifactId>projectB</artifactId>  
  <packaging>jar</packaging>  
  <version>1.0-SNAPSHOT</version>
</project> 
           

聚合

  • 较大的Maven项目一般会被拆分成多个模块(例如springframework分为spring-core、spring-context等)。如果每次构建整个项目时都需要依次构建多个模块就显得十分不便。Maven通过聚合模块将一组模块进行统一管理。
  • 聚合模块只有一个pom.xml文件,且坐标中的packaging元素固定为pom。被聚合模块管理的其他模块通过modules元素声明:
<modules>
    <module>module-1</module>
    <module>module-2</module>
</modules>
           
  • 聚合模块一般为主从结构,即被聚合的模块作为聚合模块的子目录存储。但此要求不是必须的,也可以将聚合模块与被聚合模块平级存储,这时需要注意修改module元素中的路径:
<modules>
    <module>../module-1</module>
    <module>../module-2</module>
</modules>
           
  • 义了聚合模块之后,就可以通过聚合模块对其包含的所有模块统一进行构建操作了。

父pom的配置

大概了解了继承和聚合的配置,我们还需要进一步了解一下父pom的配置才能更好的理解maven带给我们的统一配置:

<properties>

标签

  • 定义变量,可以在父pom文件和其子pom文件中使用,最常用的用法就是定义项目中使用jar包的版本信息,如:
properties>
<!--
统一在这管理版本号 -->
<itoo-tool.version>0.0.1-SNAPSHOT</itoo-tool.version>
<itoo-base.version>0.0.1-SNAPSHOT</itoo-base.version>
<hibernate.version>4.3.7.Final</hibernate.version>
<javaee-api.version>6.0</javaee-api.version>
<spring.version>4.0.8.RELEASE</spring.version>
</properties>
           

<dependencyManagement>

标签:

  • 定义项目中所有依赖的jar包,但是并不是说父项目的依赖中会添加这些jar包的依赖只是定义,子项目中如果需要引用这些jar只需要声明和信息就可以,版本信息可写可不写,写的话就使用自己的版本不写的话,就使用父pom中声明的版本,如:

    父pom中:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
</dependencyManagement>
           

子pom中:

<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
</dependencies>
           

这样配置如果项目的版本发生变化,只需修改父pom中的版本信息,就可以实现版本的升级,也就是版本的统一管理。

继续阅读