一、前言
为了避免多个没的子模块中引入不同版本的依赖包,所以现在统一采用父子工程(或叫父子模块)的pom.xml组织方式,即有一个父工程,它这模块什么内容也没有,只有一个pom.xml文件,即它是一个专门管理依赖包的模块,并且pom.xml中的packaging 为pom,如下:
<packaging>pom</packaging>
父工程这个pom.xml一般只定义了各个依赖的版本号及包含哪些子模块,以及插件有哪些。
二、父模块是如何管理依赖的
一般如果这个依赖有可能各个子模块均要用到时,才需要放到父模块的pom.xml中进行定义,如果子模块专有的依赖则放到子模块本身自己的pom.xml中进行声明定义。
父模块中的pom.xml中一般是通过Maven 使用 dependencyManagement 来统一模块见的依赖版本问题,例如:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee-api.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
版本号可以定义在这个文件属性中,dependencyManagement只是定义了一版本号,其实它没有引入下载真正的依赖,只有子模块用到时,它才会下载引入到子模块中。记住:
此处 dependencyManagement 并不会直接引入依赖,是一种懒加载的方式
当然如果你在父模块中没有用dependencyManagement,而是只有dependencies,则相对于dependencyManagement,父类中直接使用所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
三、总结:
1.如果多个子模块均会用到某一个依赖时,则放到父模块中进行声明版本号,再在本身子模块应用时再定义依赖关系,记得子模块也必须声明(只是不需要定义具体版本号了),不然不会引入。
2.如果依赖只在某个子项目中使用,则可以在子项目的pom.xml中直接引入,防止父pom的过于臃肿。