1. 程式人生 > >Maven構建多模組Java工程

Maven構建多模組Java工程

概述

專案開發時,通常會將專案分為多個模組進行開發,本文討論如何用Maven構建多模組的Java工程。

軟體環境

Java:1.6.0_26

Maven:3.1.1

OS:WindowXP SP3

專案模組說明

示例工程分為多個模組,分別是:

  1. research_maven_javamm:父工程,聚合各模組。
  2.  App:主模組,依賴ModuleA、ModuleB和ModuleCom
  3. ModuleA:模組A,依賴ModuleCom
  4. ModuleB:模組B,依賴ModuleCom
  5. ModuleCom:共通模組

多模組專案整體構建使用Maven的父子繼承能力。

建立工程

首先建立工程和各模組,然後配置各模組之間的依賴關係。

專案的對第三方構件的依賴關係配置在父工程的pom.xml中,這樣各模組可以省去第三方構件的依賴配置。

建立父工程

首先建立父工程應用

建立指令碼

mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=research_maven_javamm -DarchetypeArtifactId=maven-archetype-quickstart


修改父工程為Maven的父工程

建立成功後,需要將父工程型別改為Maven的父工程,修改pom.xml檔案的packaging屬性為pom,如下:

<packaging>pom</packaging>

建立各模組工程

父工程建立成功後,建立各模組工程。

注意:建立各模組工程時,要先cd到父工程的根目錄:

cd research_maven_javamm

建立App主模組

mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=app -DarchetypeArtifactId=maven-archetype-quickstart

建立ModuleA工程

mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=module-a -DarchetypeArtifactId=maven-archetype-quickstart

建立ModuleB工程

mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=module-b -DarchetypeArtifactId=maven-archetype-quickstart

建立ModuleC工程

mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=module-com -DarchetypeArtifactId=maven-archetype-quickstart

建立各模組後,可以看到父工程research_maven_javamm的pom.xml檔案中添加了子工程的資訊:
<modules>
    <module>app</module>
    <module>module-a</module>
    <module>module-b</module>
    <module>module-com</module>
</modules>

配置各模組依賴關係

建立各模組工程後,需要對各模組工程之間的依賴關係進行配置。如之前說明的模組依賴關係:

  1. ModuleA依賴ModuleCom
  2. ModuleB依賴ModuleCom
  3. 主模組app依賴ModuleA、ModuleB和ModuleCom

配置ModuleA依賴ModuleCom

修改ModuleA的pom.xml檔案,新增ModuleCom的依賴:

<dependency>
    <groupId>com.github.hubin0011</groupId>
    <artifactId>module-com</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

配置ModuleB依賴ModuleCom

修改ModuleB的pom.xml檔案,新增ModuleCom的依賴:

<dependency>
    <groupId>com.github.hubin0011</groupId>
    <artifactId>module-com</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

配置主模組app依賴ModuleA、ModuleB和ModuleCom

修改app的pom.xml檔案,新增ModuleA、ModuleB和ModuleCom的依賴:

<dependency>
    <groupId>com.github.hubin0011</groupId>
    <artifactId>module-a</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.github.hubin0011</groupId>
    <artifactId>module-b</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.github.hubin0011</groupId>
    <artifactId>module-com</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

編譯工程

編譯模組工程

在模組工程的目錄,執行如下指令碼可以編譯該模組工程:

mvn clean compile

編譯父工程

在父工程的目錄,執行如下指令碼則編譯整個工程:

mvn clean compile

執行單體測試

對模組工程進行單體測試

在模組工程的目錄,執行如下指令碼可以執行該模組工程的單體測試:

mvn clean test

對整個工程進行單體測試

在父工程的目錄,執行如下指令碼則執行整個工程的單體測試:

mvn clean test

打包

打包模組工程

在模組工程的目錄,執行如下指令碼可以打包該模組:

mvn clean package

打包整個工程

在父工程的目錄,執行如下指令碼則打包所有模組,在各模組的target目錄會生成相應的jar構件:

mvn clean package

釋出構件到本地倉庫

釋出模組工程到本地倉庫

在模組工程的目錄,執行如下指令碼可以釋出該模組工程到本地倉庫:

mvn clean install

釋出整個工程

在父工程的目錄,執行如下指令碼則釋出整個工程到本地倉庫:

mvn clean install

最佳實踐

  • 父工程不應該有程式碼,所有的程式碼都應該查分到子模組中開發
  • 工程共通依賴的第三方構件應該在父工程的pom.xml中維護,各模組依賴的特殊構件可以在各模組的pom.xml中維護

示例工程下載