您的位置:首页 > 其它

maven 详解之聚合与继承

2017-12-28 14:45 323 查看

聚合

我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们期望能够使用简单的操作来完成编译等工作。
所谓聚合,顾名思义,就是把多个模块或项目聚合到一起,我们可以建立一个专门负责聚合工作的Maven Project-aggregator。
(1)该aggregator本身做为一个maven项目,它必须有自己的POM。
(2)它的打包方式必须为:pom
(3)引入新的元素:modules-module
(4)版本:聚合模块的版本和被聚合模块版本一致。
(5)relative path:每个module的值都是一个当前POM的相对目录。
(6)目录名称:为了方便的快速定义内容,模块所处的目录应当与其artifactId一致(Maven约定而不是硬性要求),总之,模块所处的目录必须和<module>模块所处的上当</module>相一致。
(7)习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最项层,其它聚合模块作为子目录存在。这样当我们打开项目的时候,第一个看到的就是聚合模块的POM。
(8)聚合模块减少的内容 :聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/java,src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。
(9)聚合模块和子模块的目录:他们可以是父子类,也可以是平行结构,当然如果使用平行结构,那么聚合模块的POM也需要做出相应的更改。

继承

我们在开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的元素,比如说每个模块都需要junit,使用spring的时候,其核心jar也必须被引入,在编译的时候,maven-compiler-plugin插件也要被引入。
dependencies是可以被继承的,这个时候我们就想到让我们的发生了共同依赖元素转移到parent中,这样我们又进一步的优化配置。可是问题也随之而来,如果有一天我创建了一个新模块,但是这个模块不需要这些parent的依赖,该如何处理?那就是增加一个新的元素dependencyManagement。

<properties>
<target.version>2.5.6</target.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>your groupId</groupId>
<artifactId>your artifactId</artifactId>
<version>${target.version}</version>
</dependency>
</dependencies>
</dependencyManagement>


<dependencies>
<dependency>
<groupId>your groupId</groupId>
<artifactId>your artifactId</artifactId>
</dependency>
</dependencies>


子模块的pom继配置的时候,仍然要声明groupId和artifactId,表示当前配置是继承于父pom的,从而直接使用父pom的版本对应的资源。
这个可以有效的避免多个子模块使用依赖版本不一致的情况,有助于降低依赖冲突的几率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: