Maven的继承与聚合详解

一、Maven为什么需要定义继承?如何定义

个人总结:继承是为了工程的多模块之间依赖的jar共享并且版本唯一性。     

  一个系统可能分为多个子项目(即模块),为了版本管理统一,所以只在一个地方定义版本号,所以只要在父pom.xml中定义依赖jar包的版本号,在子项目(或称模块)的pom.xml不需要再定义版本号,但要声明引用哪一个父项目及哪些jar包。

         另一个本质是为了解决多个子项目(即模块)如果都依赖了一个相同的jar包时,避免在依赖链上各个子项目均被导入,造成重复,这时候就要用继承。

定义法:

父项目中定义pom.xml

<depencyManagement>
    <depencies>
       <depency>
           共用依赖包的坐标...
       </depency>
    </depencies>
</depencyManagement>

子项目中定义pom.xml

<parent>
    <!--父项目坐标-->
    <groupId> </groupId>
    <artifactId> </artifactId>
    <version> </version>
</parent>

二、Maven为什么需要定义聚合?如何定义?

个人总结:工程中多个模块(又称子项目)一起打包,实现多模块执行mvn命令的自动化。

 一个项目有多个模块组成,为了避免每个模块都要单独编译、测试及打包,通过聚合的定义,自动把多个模块一起打包处理。

聚合不一定有里面有父子关系。即子模块只是一个称呼,它的pom.xml不一定非要定义<parent>

      (1)通常在多个模块的根目录下创建一个pom.xml,这个文件不用什么东西,只是用来聚合的定义。

     (2) 在子模块里面就不用配置版本version、作用域scope等信息,会自动在父pom.xml里面找。我们的版本统一在依赖管理中管理了.    

     (3)可以把公用的东西放在properties中,比如下图中,所有项目的junit版本号都是3.8.1,所有项目字符编码都是UTF-8,就可以放在properties中,然后用类似于EL表达式的表达式获取版本号。

 

三、工程实践总结:

     一般一个maven工程,由多个模块组成,这些模块的pom.xml中会同时定义继承与聚合关系,为了实现依赖jar及版本号的唯一性(即避免jar重复),同时定义各个子模块之间的聚合关系,为了自动统一实现各个模块的打包等操作,例如mvn clean,mvn package的命令时,各个子模块也会自动执行。

两句话总结:

     1.编译,测试,打包时,我只要在parent中进行,那你就要定义各个模块的聚合关系,即父pom.xml和子pom.xml的内容。

     2.工程依赖的jar如何让各个模块共享,避免重复,同时保证版本号统一,那你就要定义各个模块的继承关系。

以上说了这么多,目的只有一个,让大家知道如何定义工程中多模块的pom.xml内容,灵活应用继承与聚合关系。

 

发布了85 篇原创文章 · 获赞 54 · 访问量 10万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览