一个大的项目,随着功能的日趋增多,会逐渐的将部分功能剥离出来,变成一个较为独立的模块,或者是将某些公共的代码变成基础库。parent与module就是用来解决这样的问题的(parent与module不须要配对使用)。好比下面的工程结构:maven
─parent
├─child1
├─child2
├─share1
├─share2
├─pom.xmlcode
parent是根目录, 它包含4个模块, child1生成可执行jar, child2生成一个war包, share1生成jar库, share2是依赖于share1的jar库. 它们的依赖关系以下xml
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格式ci
<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格式io
<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过程以下test
cd parent/share1 mvn install
上面两步都执行成功以后, child1才能编译经过基础