概述

项目开发时,通常会将项目分为多个模块进行开发,本文讨论如何用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中,这样各模块可以省去第三方构件的依赖配置。

创建父工程

首先创建父工程应用

创建脚本
  1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=research_maven_javamm -DarchetypeArtifactId=maven-archetype-quickstart 
修改父工程为Maven的父工程

创建成功后,需要将父工程类型改为Maven的父工程,修改pom.xml文件的packaging属性为pom,如下:

  1. <packaging>pom</packaging>
创建各模块工程

父工程创建成功后,创建各模块工程。

注意:创建各模块工程时,要先cd到父工程的根目录:

  1. cd research_maven_javamm 
创建App主模块
  1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=app -DarchetypeArtifactId=maven-archetype-quickstart 
创建ModuleA工程
  1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=module-a -DarchetypeArtifactId=maven-archetype-quickstart 
创建ModuleB工程
  1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=module-b -DarchetypeArtifactId=maven-archetype-quickstart 
创建ModuleC工程
  1. mvn archetype:create -DgroupId=com.github.hubin0011 -DartifactId=module-com -DarchetypeArtifactId=maven-archetype-quickstart 

创建各模块后,可以看到父工程research_maven_javamm的pom.xml文件中添加了子工程的信息:

  1. <modules>
  2. <module>app</module>
  3. <module>module-a</module>
  4. <module>module-b</module>
  5. <module>module-com</module>
  6. </modules>
配置各模块依赖关系

创建各模块工程后,需要对各模块工程之间的依赖关系进行配置。如之前说明的模块依赖关系:

  1. ModuleA依赖ModuleCom
  2. ModuleB依赖ModuleCom
  3. 主模块app依赖ModuleA、ModuleB和ModuleCom
配置ModuleA依赖ModuleCom

修改ModuleA的pom.xml文件,添加ModuleCom的依赖:

  1. <dependency>
  2. <groupId>com.github.hubin0011</groupId>
  3. <artifactId>module-com</artifactId>
  4. <version>1.0-SNAPSHOT</version>
  5. </dependency>
配置ModuleB依赖ModuleCom

修改ModuleB的pom.xml文件,添加ModuleCom的依赖:

  1. <dependency>
  2. <groupId>com.github.hubin0011</groupId>
  3. <artifactId>module-com</artifactId>
  4. <version>1.0-SNAPSHOT</version>
  5. </dependency>
配置主模块app依赖ModuleA、ModuleB和ModuleCom

修改app的pom.xml文件,添加ModuleA、ModuleB和ModuleCom的依赖:

  1. <dependency>
  2. <groupId>com.github.hubin0011</groupId>
  3. <artifactId>module-a</artifactId>
  4. <version>1.0-SNAPSHOT</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.github.hubin0011</groupId>
  8. <artifactId>module-b</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.github.hubin0011</groupId>
  13. <artifactId>module-com</artifactId>
  14. <version>1.0-SNAPSHOT</version>
  15. </dependency>

编译工程

编译模块工程

在模块工程的目录,执行如下脚本可以编译该模块工程:

  1. mvn clean compile 
编译父工程

在父工程的目录,执行如下脚本则编译整个工程:

  1. mvn clean compile 

执行单体测试

对模块工程进行单体测试

在模块工程的目录,执行如下脚本可以运行该模块工程的单体测试:

  1. mvn clean test 
对整个工程进行单体测试

在父工程的目录,执行如下脚本则运行整个工程的单体测试:

  1. mvn clean test 

打包

打包模块工程

在模块工程的目录,执行如下脚本可以打包该模块:

  1. mvn clean package 
打包整个工程

在父工程的目录,执行如下脚本则打包所有模块,在各模块的target目录会生成相应的jar构件:

  1. mvn clean package 

发布构件到本地仓库

发布模块工程到本地仓库

在模块工程的目录,执行如下脚本可以发布该模块工程到本地仓库:

  1. mvn clean install 
发布整个工程

在父工程的目录,执行如下脚本则发布整个工程到本地仓库:

  1. mvn clean install 

最佳实践

  • 父工程不应该有代码,所有的代码都应该查分到子模块中开发
  • 工程共通依赖的第三方构件应该在父工程的pom.xml中维护,各模块依赖的特殊构件可以在各模块的pom.xml中维护

示例工程下载

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

Maven学习(2) - Maven构建多模块Java工程的更多相关文章

  1. Maven学习- 使用Maven构建Web项目

    从网上查了一些资料,才算明白(也就是怎么操作吧),怎么使用Maven构建一个Web项目,找到一篇文档,主要都是从这里学到的: 下载地址:使用Eclipse构建Maven的Web项目.docx 现自己在 ...

  2. maven 学习---使用Maven创建Java项目

    在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...

  3. Maven学习(1) - Maven入门

    home index:http://maven.apache.org/ download:http://maven.apache.org/download.cgi install: http://ma ...

  4. Maven学习总结--maven入门(一)

    一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理.

  5. Maven学习 二 Maven环境搭建

    第一步:下载Maven并解压 注意选择镜像地址,选择国内的会快点 解压目录 Maven目录分析 bin:含有mvn运行的脚本 boot:含有plexus-classworlds类加载器框架 conf: ...

  6. 【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包

    http://blog.csdn.net/u013177446/article/details/54134394 ******************************************* ...

  7. Maven学习(一)-----Maven安装配置总结

    想要安装 Apache Maven 在Windows 系统上, 需要下载 Maven 的 zip 文件,并将其解压到你想安装的目录,并配置 Windows 环境变量. 所需工具 : JDK 1.8 M ...

  8. Maven学习——修改Maven的本地仓库路径

    安装Maven后我们会在用户目录下发现.m2 文件夹.默认情况下,该文件夹下放置了Maven本地仓库.m2/repository.所有的Maven构件(artifact)都被存储到该仓库中,以方便重用 ...

  9. Maven学习(十七)-----Maven外部依赖

    Maven外部依赖 正如大家所了解的那样,Maven确实使用 Maven 库的概念作依赖管理.但是,如果依赖是在远程存储库和中央存储库不提供那会怎么样? Maven 提供为使用外部依赖的概念,就是应用 ...

随机推荐

  1. .net+easyui系列--datagrid

    加载CSS <link href="../../Public/easyui/SiteEasy.css" rel="stylesheet" type=&qu ...

  2. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  3. jquery 关于event.target使用的几点说明介绍

    event.target说明:引发事件的DOM元素. this和event.target的区别js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的 ...

  4. swift 遍历

    最简单的一个遍历数组 for 随便起个名字 in 升级 上面的看不懂的话,这个应该会简单点 import UIKit let interestingNumbers = [ ,,,,,], ,,,,,] ...

  5. SQL反模式部分内容笔记

    规范化: 1, 以一种我们能够理解的方式表达这个世界中的事物; 2, 减少数据冗余存储, 防止异常或者不一致的数据; 3, 支持完整性约束.  Tips: 提高数据的性能不在此列表中. 意义: 规范化 ...

  6. java设计模式和设计原则

    一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...

  7. [Introduction to programming in Java 笔记] 1.3.7 Converting to binary 十进制到二进制的转换

    public class Binary { public static void main(String[] args) { // Print binary representation of N. ...

  8. ubuntu 之旅 —— eclipse没有菜单栏

    1. 新建一个eclipse.sh文件,加入如下内容,下面的路径是elcipse的路径 export UBUNTU_MENUPROXY=0 /home/wangdeshui/eclipse/eclip ...

  9. Java学习----接口

    1. interface关键字 2. 接口中的方法全部是抽象方法,不能被实例 3. 接口中的成员变量: public static final 4. 当子类实现接口的时候,必须覆盖接口中所有的方法 / ...

  10. Go语言探险思考笔记

    最近接触对象存储,国际上鼎鼎有名的Amazon S3还有Google Cloud Service在国内由于防火墙还有机房过远的问题,并不能投入生产使用.国内有名的对象存储,大家众所周知的七牛云,后台就 ...