Maven構建多模組Java工程
阿新 • • 發佈:2019-02-16
概述
專案開發時,通常會將專案分為多個模組進行開發,本文討論如何用Maven構建多模組的Java工程。
軟體環境
Java:1.6.0_26
Maven:3.1.1
OS:WindowXP SP3
專案模組說明
示例工程分為多個模組,分別是:
- research_maven_javamm:父工程,聚合各模組。
- App:主模組,依賴ModuleA、ModuleB和ModuleCom
- ModuleA:模組A,依賴ModuleCom
- ModuleB:模組B,依賴ModuleCom
- 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>
配置各模組依賴關係
建立各模組工程後,需要對各模組工程之間的依賴關係進行配置。如之前說明的模組依賴關係:
- ModuleA依賴ModuleCom
- ModuleB依賴ModuleCom
- 主模組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中維護