一個大的項目,隨着功能的日趨增多,會逐漸的將部分功能剝離出來,變成一個較爲獨立的模塊,或者是將某些公共的代碼變成基礎庫。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才能編譯經過基礎