1. 程式人生 > >【Maven】Eclipse下Maven工程多模組繼承和聚合建立

【Maven】Eclipse下Maven工程多模組繼承和聚合建立

轉自:http://www.tuicool.com/articles/NnmiyiU

使用Maven對專案進行管理的時候,多模組的繼承和聚合是必不可少的,本文簡要說明一下在eclipse IDE下建立多模組工程。

1.Maven多模組的聚合

wKioL1Sc1AujsKKSAAChHDN3Azg136.jpg

一個Maven工程下建立多個模組,然後用一個專門管理模組來將實際應用到的模組組織起來。

2.Maven多模組的繼承

wKiom1Sc1EzQiS_gAADewbZUzho728.jpg

子模組通過繼承父模組,來獲的父模組中的pom.xml配置資訊。

3.Maven多模組的繼承+聚合

wKioL1Sc1YLiIccuAAD7NveN3s8560.jpg

上圖是將1和2組合起來,可以將父模組作為聚合模組和父模組,這樣父模組就可以聚合(組織)其子模組,子模組可以繼承父模組。

4.聚合和繼承的關係

       區別 :

  • 對於聚合模組來說,它知道有哪些被聚合的模組,但被聚合模組相互獨立。

  • 對於繼承關係的父POM來說,它不知道有哪些子模組繼承它,但那些子模組都必須知道自己的父POM。

共同點 :

  • 聚合 POM與繼承關係中的父POM的packaging都是pom。

  • 聚合模組與繼承關係中的父模組除了POM之外都沒有實際的內容。

5.使用Eclipse來搭建一個整合聚合和繼承的工程

5.1建立一個Maven工程,其作為聚合模組

<groupId>secondriver</groupId>
<artifactId>code-parent</artifactId
>
<version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>code-parent</name> <url>http://maven.apache.org</url>

5.2建立JavaSE的Maven模組(code-utils,圖中為code-utilss),並選擇上面code-parent工程作為父工程.

wKiom1Sc4v6RIrDwAAD-lGR9cPQ334.jpg

5.3同上,建立JavaWeb的Maven模組(code-web),並選擇上面的code-parent工程作為符工程。

5.4 Eclipse中的目錄結構圖

wKiom1Sc48bBvuO5AAF7TMkWmSI279.jpg

途中有三個工程,準確的說code-parent是maven工程,code-utils,code-web是code-parent工程下的兩個模組;code-parent對其進行了聚合,code-utils,code-web繼承了code-parent.

本地檔案系統的目錄結構:

wKioL1Sc5pmBkeeaAACB9VYDC3E069.jpgwKiom1Sc5evDZCXEAAB-YKNGIHg717.jpg

code-parent下的pom檔案即為父pom.xml,code-utils和code-web下的pom.xml繼承該pom.xml.

5.5 code-parent的pom.xml

<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>secondriver</groupId>
<artifactId>code-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<name>code-parent</name>
<url>http://maven.apache.org</url>

<modules>
<module>code-utils</module>
<module>code-web</module>
</modules>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<junit.version>4.10</junit.version>
</properties>

<description>
這是父模組,對子模組進行了整合,子模組對該模組進行了繼承。主要作用是對公共配置的統一管理
</description>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies></dependencies>
</dependencyManagement>

</project>

配置中packaging的值是pom,說明code-parent是一個聚合模組或者父模組,這裡其屬於兩者。modules下配置了兩個模組分別就是code-utils和code-web.

5.6code-utils和code-web的pom.xml

  • code-parent/code-utils/pom.xml

<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>
<parent>
<groupId>secondriver</groupId>
<artifactId>code-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>code-utils</artifactId>
<name>code-utils</name>

</project>

配置中預設的packaging的值為jar。

  • code-parent/code-web/pom.xml

<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>secondriver</groupId>
<artifactId>code-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<artifactId>code-web</artifactId>
<packaging>war</packaging>
<name>code-web Maven Webapp</name>
<url>http://maven.apache.org</url>

<build>
<finalName>code-web</finalName>
</build>
</project>

至此通過Eclipse建立多模組的Maven工程已完成。至於pom.xml如何配置,就另當別論了,關於maven的pom.xml配置更多資訊參見:http://maven.apache.org/pom.html#Resources