一个大的项目,随着功能的日趋增多,会逐渐的将部分功能剥离出来,变成一个较为独立的模块,或者是将某些公共的代码变成基础库。parent与module就是用来解决这样的问题的(parent与module不需要配对使用)。比如下面的工程结构:
─parent
├─child1
├─child2
├─share1
├─share2
├─pom.xml
parent是根目录, 它包含4个模块, child1生成可执行jar, child2生成一个war包, share1生成jar库, share2是依赖于share1的jar库. 它们的依赖关系如下
child1 (jar) child2 (war)
| /
| share2(jar)
| /
share1(jar)
parent/pom.xml基本格式
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<name>parent</name>
<packaging>pom</packaging>
<modules>
<module>child1</module>
<module>child2</module>
<module>share1</module>
<module>share2</module>
</modules>
</project>
parent/share1/pom.xm格式
<project>
<parent>
<groupId>test</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath> <!-- 这是句废代码,maven会自动搜索上一级目录,如果被安装到了仓库中,则这里的相对路径是仓库里的目录-->
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>share1</artifactId>
<version>1.0.0</version>
<name>share1</name>
<packaging>jar</packaging>
</project>
parent/child1/pom.xml格式
<project>
<parent>
<groupId>test</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my-child1</artifactId>
<version>1.0.0</version>
<name>child1</name>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>share1</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
share2, child2的格式也是类似的 本例中,模块之间也产生了依赖关系,需要被依赖的module和parent/pom.xml安装到本地仓库中, 否则编译child1时,会找不到shar1,或是找不到parent 安装parent/pom.xml过程如下
cd parent
mvn install -N
-N是指不递归操作,否则会把所有的child都安装一遍,如果你不介意,也无所谓,但是会多花时间,尤其是很大的工程。 安装share1过程如下
cd parent/share1
mvn install
上面两步都执行成功之后, child1才能编译通过