Maven进阶系列-继承和聚合

Maven进阶系列-继承和聚合

文章目录

  • Maven进阶系列-继承和聚合
    • 1. 继承
    • 2. 继承的作用
      • 2.1 在父工程中配置依赖的统一管理
      • 2.2 在父工程中声明自定义属性
      • 2.3 父工程中必须要继承的配置
    • 3. 聚合
    • 4. 聚合的作用

1. 继承

Maven工程之间存在继承关系,例如工程B继承工程A,工程C也继承了工程A

ProjectA的pom.xml



    4.0.0

    com.xmc
    ProjectA
    pom
    1.0-SNAPSHOT
    
        ProjectB
        ProjectC
    

    
        8
        8
    


ProjectB的pom.xml



    
        ProjectA
        com.xmc
        1.0-SNAPSHOT
    
    4.0.0

    ProjectB

    
        8
        8
    


ProjectC的pom.xml



    
        ProjectA
        com.xmc
        1.0-SNAPSHOT
    
    4.0.0

    ProjectC

    
        8
        8
    


Maven进阶系列-继承和聚合_第1张图片

本质上是ProjectB和ProjectC的 pom.xml 中的配置
继承了ProjectA中 pom.xml 的配置。

Maven进阶系列-继承和聚合_第2张图片

这里提到了超级pom.xml,对于我们创建的一个maven工程,即便我们自己的pom.xm文件中没有明确指定一个父工程(父POM),其实也默认继承了超级POM,就好比JAVA类继承Object类一样。

maven官网关于超级POM的介绍:
https://maven.apache.org/pom.html#Inheritance
link

超级POM文件的位置:
例如,我使用的是maven 3.6.1版本:
Maven进阶系列-继承和聚合_第3张图片

打开这个jar包,可以看到超级POM文件:
Maven进阶系列-继承和聚合_第4张图片

超级pom.xml文件







  4.0.0

  
    
      central
      Central Repository
      https://repo.maven.apache.org/maven2
      default
      
        false
      
    
  

  
    
      central
      Central Repository
      https://repo.maven.apache.org/maven2
      default
      
        false
      
      
        never
      
    
  

  
    ${project.basedir}/target
    ${project.build.directory}/classes
    ${project.artifactId}-${project.version}
    ${project.build.directory}/test-classes
    ${project.basedir}/src/main/java
    ${project.basedir}/src/main/scripts
    ${project.basedir}/src/test/java
    
      
        ${project.basedir}/src/main/resources
      
    
    
      
        ${project.basedir}/src/test/resources
      
    
    
      
      
      
        
          maven-antrun-plugin
          1.3
        
        
          maven-assembly-plugin
          2.2-beta-5
        
        
          maven-dependency-plugin
          2.8
        
        
          maven-release-plugin
          2.5.3
        
      
    
  

  
    ${project.build.directory}/site
  

  
    
    
      release-profile

      
        
          performRelease
          true
        
      

      
        
          
            true
            maven-source-plugin
            
              
                attach-sources
                
                  jar-no-fork
                
              
            
          
          
            true
            maven-javadoc-plugin
            
              
                attach-javadocs
                
                  jar
                
              
            
          
          
            true
            maven-deploy-plugin
            
              true
            
          
        
      
    
  




2. 继承的作用

2.1 在父工程中配置依赖的统一管理

  • 在父工厂projectA的pom.xml中定义

    
        
            log4j
            log4j
            1.2.17
        
        
            cn.hutool
            hutool-core
            5.8.15
        
    

  • 然后在子工程projectC的pom.xml中使用的时候就不需要申明版本号,在父工程中统一管理jar包版本

    
        log4j
        log4j
    
    
        cn.hutool
        hutool-core
    

2.2 在父工程中声明自定义属性



  
  6.0.6

在需要的地方使用${}的形式来引用自定义的属性名:


    org.springframework
    spring-core
    ${spring.version}

2.3 父工程中必须要继承的配置

  • 父工程中的依赖

。。。

这里的依赖不是 dependencyManagement>中的依赖,dependencyManagement>是定义,并不引入依赖

  • 父工程中的构建

插件设置方法与前面的依赖极为相似,同样也有插件管理 pluginManagement,与 dependencyManagement 类似,这里给出一个 parent 中设置的样例模板


    
		
    
    
        
			
        
    


3. 聚合

在Maven中,聚合(aggregation)是指将多个项目或模块组合成一个更大的项目的过程。通过使用聚合,可以将多个相关的项目捆绑在一起,以便一次性构建和部署。

在Maven中,可以使用元素来定义聚合关系。在父项目的pom.xml文件中,可以使用元素列出所有要聚合的项目或模块。例如:

<modules>
    <module>ProjectBmodule>
    <module>ProjectCmodule>
modules>

4. 聚合的作用

  • 一键执行 Maven 命令:很多构建命令都可以在“总工程”中一键执行。

以install 命令为例:Maven 要求有父工程时先安装父工程;有依赖的工程时,先安装被依赖的工程。我们自己考虑这些规则会很麻烦。但是工程聚合之后,在总工程执行 mvn install 可以一键完成安装,而且会自动按照正确的顺序执行。

  • 配置聚合之后,各个模块工程会在总工程中展示一个列表,让项目中的各个模块一目了然。

你可能感兴趣的:(maven,maven,java)