maven的聚合和继承

2018-09-26  本文已影响29人  不知名的蛋挞

maven的聚合

有三个项目,我们分了三个模块编译:user-core user-log user-service给我们带来最大的问题就是得一个一个地编译,要是很多个模块那样更麻烦,效率很低。那怎么办呢?

我们可以在三个模块的根目录中创建pom.xml文件,通过这个文件集中编译里面的项目。这个Pom.xml不用写任何东西,就是用来做聚合操作的。

在eclipse的环境中显然没有办法把这个pom.xml放进去,所以我们可以建一个maven项目。步骤如下:

(1)创建一个简单的项目

跳过archetyoe selection,注意下面packaging

也可以在生成的pom文件中改:

<packaing>pom</packaing>

(2)修改pom.xml

在这个项目中我们只用改pom.xml的文件。目录结构如下:

|-- pom.xml
|-- module-a
    `-- pom.xml
|-- module-b
    `-- pom.xml
|-- module-c
    `-- pom.xml
|-- foo-all
    `-- pom.xml

那我们就在pom.xml文件中导入三个项目模块:

(3)把user-core user-log user-service三个项目的target排除掉,因为target是编译后的文件夹 ,无需进行提交。

maven的继承

在各个模块中的pom文件中存在着大量的重复,如何解决呢?我们可以让所有的项目继承于一个根类,在根类里面配置。

(1)创建根类项目

(2)在这个项目中,我们把三个项目共同有的东西全部拷贝进根项目的pom.xml,并用<dependencyManagement>进行依赖管理。

maven提供的dependencyManagement元素能让子模块继承到父模块的依赖配置,有能保证子模块的灵活性。dependencyManagement元素下的依赖声明不会引入实际的依赖,能约束dependencies下的依赖使用。如果子项目中不声明经过父项目dependencyManagement修饰的依赖,那么子项目就不会引入该依赖。

子项目如果要声明父项目中经过dependencyManagement修饰的依赖,只需要定义groupId和artifactId即可。

由于有了依赖管理的类,在模块类里面就不用配置版本version、作用域scope等信息,会自动在父类里面找。我们的版本统一在依赖管理中管理了。

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

(4)因为main目录和test目录对父的pom没什么作用,所以可以删除。

(5)然后把项目重复的东西全部删掉,在每个模块中然后加入parent标签,比如在user-service中:

一定要注意继承的绝对路径是在pom文件!

(6)我们可以把继承和聚合放在同一个类里面

上一篇下一篇

猜你喜欢

热点阅读