Maven学习(四) Maven 聚合 继承 单继承

Maven学习(四) Maven 聚合 继承 单继承

聚合

Maven聚合:一个Maven项目,用来管理它的maven子构件模块,在pom.xml中需要添加如下配置信息:


 模块1
 模块2
 模块n
 

 pom

package的值必须为pom,执行任何mvn命令,都会modules中包含的所有模块执行同样的命令,而被包含的模块不需要做任何特殊的配置,是正常的maven项目就行。上面的module元素,这部分是被聚合的模块pom.xml所在目录的相对路径。
聚合的功能中,聚合模块的pom.xml中通过modules->module来引用被聚合的模块,被聚合的模块是不用感知自己被聚合。

继承

继承的实现

1)创建一个父maven构件,将依赖信息放在pom.xml中


   依赖的构件的坐标信息
   依赖的构件的坐标信息
   依赖的构件的坐标信息

2)将父构件的package元素的值置为pom

pom

3)在子构件的pom.xml引入父构件的配置:


   父构件groupId
   父构件artifactId
  父构件的版本号 
  父构件pom.xml路径
 

relativePath表示父构件pom.xml 相对路径,默认是../pom.xml,
所以一般情况下父子结构的maven构件在目录结构上一般也采用父子关系。

mvn dependency:tree 这个插件可以根据pom.xml的配置,列出构件的依赖树信息。

子模块中执行mvn命令的时候,会去找父pom.xml的配置,会先通过relativePath指定的路径去找,如果找不到,会尝试通过坐标在本地仓库进行查找,如果本地找不到,会去远程仓库找,如果远程仓库也没有,会报错。

可以通过继承的元素有以下这些:

groupId:项目组ID,项目坐标的核心元素
version:项目版本,项目坐标的核心元素
description:项目的描述信息
organization:项目的组织信息
inceptionYear:项目的创始年份
url:项目的url地址
developers:项目的开发者信息
contributors:项目的贡献者信息
distributionManagement:项目的部署配置信息
issueManagement:项目的缺陷跟踪系统信息
ciManagement:项目的持续集成系统信息
scm:项目的版本控制系统信息
mailingLists:项目的邮件列表信息
properties:自定义的maven属性配置信息
dependencyManagement:项目的依赖管理配置
repositories:项目的仓库配置
build:包括项目的源码目录配置、输出目录配置、插件管理配置等信息
reporting:包括项目的报告输出目录配置、报告插件配置等信息

依赖管理(dependencyManagement)

maven提供的dependencyManagement元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性,在dependencyManagement元素下声明的依赖 不会 引入实际的依赖,他只是声明了这些依赖,它可以对dependencies中使用的依赖起到一些约束作用。

dependencyManagement不会引入实际的依赖,只有在子类中使用dependency来引入父dependencyManagement声明的依赖之后,依赖的构建才会被真正的引入。子pom.xml子构件中只需要通过groupId,artifactId就可以引入依赖的构建,而不需要写version。

单继承问题

在项目中使用 另外 一个构件中dependencyManagement声明的依赖,而又不想继承这个项目的时候,可以在我们的项目中使用加入下面配置:


 
  
 com.javademo 
 javademo-parent
 1.0-SNAPSHOT 
 pom 
 import
 

 构件2
 构件3
 构件n

 

在子构件中pom.xml依赖其它项目的依赖:javademo-pom-import是单独的项目非模块,单独项目需要执行mvn install将其安装到本地仓库,才可以被其它项目或者模块引用。


 
 
 
 com.javacode2018
 javacode2018-pom-import
 1.0-SNAPSHOT
 pom
 import
 

 

 

引入后在子构件的pom.xml中dependency配置需要的依赖即可。

插件管理(pluginManagement)

maven中提供了pluginManagement元素解决插件继承问题,在父pom中可以在这个元素中声明插件的配置信息,但是子pom.xml中不会引入此插件的配置信息,只有在子pom.xml中使用plugins->plugin元素正在引入这些声明的插件的时候,插件才会起效,子插件中只需要写groupId、artifactId,其他信息都可以从父构件中传递过来。


 
     
     
         org.apache.maven.plugins
         maven-source-plugin
         3.2.0
         
             
                 attach-source
                 verify
                 
                     jar-no-fork
                 

             

         

         

         

 

在子构件中pom.xml配置引入从父pom.xml的插件:


     
         
             org.apache.maven.plugins
             maven-source-plugin
         

     

 

聚合与继承的关系

聚合主要是为了方便多模块 快速 构建,而 继承 主要是为了 重用 相同 的配置。对于聚合来说,聚合 模块是知道 被聚合模块的存在的,而 被聚合模块 是感知不到 聚合模块 的存在。

对于继承来说,父构件 是 感知 不到 子构件 的存在,而 子构件需要使用 parent 来引用 父 构件。

两者的 共同点 是,聚合模块和继承中的父模块的package属性都必须是 pom 类型的,同时,聚合模块和父模块中的除了pom.xml,一般都是没有什么内容的。

你可能感兴趣的:(Maven学习(四) Maven 聚合 继承 单继承)