本文使用intellij idea
搭建Maven3
多模块项目,并进行配置相关配置,以实现项目的构建打包。
项目结构
multi-module-project
是我们的项目名称,其中包含多个模块:
mmp-dal
模块:数据访问层,提供对原始数据(主要指数据库)的操作mmp-integration
模块:提供对第三方服务的调用mmp-commons
模块:提供工具类、常量定义等公共服务mmp-biz
模块:使用以上模块完成相关业务mmp-service
模块:对业务模块相应接口进行包装,并进行入参与返回值判断mmp-api
模块:提供对外服务的接口
搭建项目
新建项目,选择Maven
,不要勾选Create from archetype
。
填写GroupId
、ArtifactId
与Version
。
GroupId
定义了项目属于哪个组,一般和项目所在的组织或公司存在关联ArtifactId
定义了当前Maven
项目在组中唯一的ID
Version
指定了项目当前的版本,SNAPSHOT
意为快照,说明该项目还处于开发中,是不稳定版本
下面的Project name
与Project location
默认是没有-
的,这里我们为了与前面ArtifactId
一致,将-
加上。
由于multi-module-project
为聚合项目,因此我们删除src
文件夹。
接下来我们给该项目添加模块。
首先添加mmp-dal
模块。
和上面一样,这里我们为了与前面ArtifactId
一致,将-
加上。
依次添加各个模块。
下面multi-module-project
的POM
配置是idea
自动生成的,其中的注释解释了各个参数的含义。
<?xml version="1.0" encoding="UTF-8"?>
<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定义了项目属于哪个组,一般和项目所在的组织或公司存在关联-->
<groupId>com.sigalhu.mmp</groupId>
<!--artifactId定义了当前Maven项目在组中唯一的ID-->
<artifactId>multi-module-project</artifactId>
<!--packaging指定打包类型,pom表示该项目为聚合项目,不打包-->
<packaging>pom</packaging>
<!--version指定了项目当前的版本,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定版本-->
<version>1.0-SNAPSHOT</version>
<!--用户可以通过在一个打包方式为pom的Maven项目中声明任意数量的module来实现模块的聚合-->
<!--在构建时,Maven按序读取POM,如果该POM没有依赖模块,那么就构建该模块,否则就先构建其依赖模块,
如果该依赖还依赖于其他模块,则进一步先构建依赖的依赖-->
<modules>
<module>mmp-dal</module>
<module>mmp-integration</module>
<module>mmp-commons</module>
<module>mmp-biz</module>
<module>mmp-service</module>
<module>mmp-api</module>
</modules>
</project>
下面mmp-dal
的POM
配置同样由idea
自动生成,我们通过注释对各个参数进行说明。
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--使用parent声明父模块-->
<parent>
<artifactId>multi-module-project</artifactId>
<groupId>com.sigalhu.mmp</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!--子模块隐式地从父模块继承了groupId和version-->
<!--artifactId定义了当前Maven项目在组中唯一的ID-->
<artifactId>mmp-dal</artifactId>
</project>
配置依赖
项目搭建好后,我们先来配置一下测试依赖,在multi-module-project
的POM
中添加配置,这里由于篇幅所限,省略了之前已经提到的配置。
在配置依赖时,我们一般在父模块的dependencyManagement
中进行声明,此时声明的依赖并未生效,同时在properties
中定义一个表示版本号的Maven
属性,并通过${...}
加以引用,在以后当我们想要升级依赖的版本时,只需要修改properties
就可以。
接下来,我们通过dependencies
来引入项目依赖,由于junit
的依赖信息已经在dependencyManagement
中声明过了,所以我们只需要在dependencies
中声明junit
的groupId
和artifactId
,Maven
就会找到在dependencyManagement
中的对应声明并引用该依赖。
通过dependencies
引入的依赖会作用于当前项目以及在modules
中声明的子模块,这里所有子模块都要使用junit
进行单元测试,因此在父模块中引用该依赖。
<project>
...
<!--使用properties定义Maven属性-->
<properties>
<junit.version>4.12</junit.version>
</properties>
<!--dependencies下可包含多个dependency以声明项目的依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--测试-->
<dependency>
<!--定义当前Maven项目隶属的实际项目,一个实际项目往往会被划分成很多模块-->
<groupId>junit</groupId>
<!--定义实际项目中的一个Maven项目(模块),推荐使用实际项目名称作为artifactId的前缀-->
<artifactId>junit</artifactId>
<!--Maven运行时会将POM中所有${junit.version}替换成实际值-->
<version>${junit.version}</version>
<!--scope为依赖范围,test表示该依赖只对测试有效-->
<scope>test</scope>