前边说了maven的modules,要明确的一点是:只有你的项目分成了若干个模块(可能是基于功能分模块,比如action模块,service模块,dao模块;也可能是基于业务分模块,比如user模块,order模块等),才有使用modules的必要。
一个大中型Java项目中,一般由若干个module组成,各个module各司其职,担任整个工程中不同角色。大多数情况下,大多数module都会用到相同的jar包,或者插件。如果每个module中都引入自己喜欢的jar、插件,不仅冗余,而且太多冗余jar包,使得资源浪费。为了统一管理各个module中的library jar plugin,让所有子module都继承一个父pom.xml。有同学说,既然有了继承,我就直接在pom.xml 的 dependencies中声明module中需要的library,不就好了!想想如果有一些module中不需要这样的library,岂不是又要引进冗余jar。而dependencyManagement正好解决了这一问题,他在父pom.xml中,不会直接到repository中解析你定义的依赖,而是在子module中,如果你用到了dependencyManagement中声明的dependency包,这时你只需要声明包的groupid, artifactid,即可,因为dependencyManagement已经替你定义好了版本version,从而既实现了版本统一管理,又可以各取所需!从上面的叙述来看,dependencyManagement也是当你的项目分了若干模块之后,才有使用的必要,不然则没有必要去使用它。
dependencyManagement用于在父项目中统一对子项目依赖管理,另外pluginManagement这个标签与dependencyManagement的作用也是类似的,即由父pom.xml定义该元素,可统一子项目中的插件。
举个使用了dependencyManagement和pluginManagement的pom.xml的例子,当然这个pom.xml一般是放在父模块中,即aggregation聚合的模块中的。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.zhao.cms</groupId>
<artifactId>aggregation_extends</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 聚合各个模块,不用单独打包 -->
<modules>
<!-- userinfo指的是项目名称 -->
<module>../userinfo</module>
<module>../column</module>
<module>../service</module>
</modules>
<!-- 管理依赖,让各个模块继承 ,各个模块的依赖部分只用写ga就行了,其他部分重复的在各个模块
中都可删掉,在这一个文件中管理jar,就很难出现jar重复的问题了,重复的jar只配一个就行了-->
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- 原本写在userinfo里的依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<!-- 编译,打包时不加入,默认为compile,servlet-api可设置为provider,mysql-conn可设置为runtime -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.4.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.15</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>column</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>userinfo</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>