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中维护

示例工程下载

本文的示例工程可以从http://github.com/hubin0011/research/tree/master/maven/java_mm下载。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值