maven是一个工具,主要是用来对Java项目进行构建(编译、测试、打包等)和依赖管理,它能够用简单的命令来构建项目,还能通过配置的方式自动下载项目依赖的jar包。
我在上一篇博客中介绍了maven的使用入门,本篇来讨论maven中聚合的概念。
应用场景
现在的大型项目一般都采用N层架构,即数据处理层、业务逻辑层、应用层、UI层、接口层等等,假设我们现在有一个名叫testproject的项目,包含testproject-dao层,testproject-domain层,testproject-web层这三层,每层都是一个maven项目。web依赖domain,domain依赖dao。
那么问题来了,每次我想运行web,打开控制台窗口后,我都需要先定位到dao项目的根目录,输入mvn clean package
并运行,然后再定位到domain项目的根目录,输入同样的命令并运行,然后再定位到web……这是比较痛苦的。业务复杂的项目可能有十几个甚至更多的子模块,如果这么搞简直无法想象。
使用聚合项目
maven对这种问题的解决方案是聚合。我们现在需要新建一个名为testproject-aggregator的maven项目,将前面提到的这三个项目聚合到一起。只需要修改testproject-aggregator项目的pom.xml文件即可。
<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>org.zdk.test</groupId>
<artifactId>testproject-aggregator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../testproject-dao</module>
<module>../testproject-domain</module>
<module>../testproject-web</module>
</modules>
</project>
第一步,将testproject-aggregator项目的坐标中的packaging设置为pom,第二步,用一个modules标签,将其余三个项目包进来。
打包聚合项目
这时,我们打开一个命令行窗口,定位到testproject-aggregator项目的根目录,输入mvn clean package
并运行,会同时对这三个项目进行打包,输出大概如下
[INFO] testproject-dao .................................... SUCCESS [ 3.540 s]
[INFO] testproject-domain ................................. SUCCESS [ 0.477 s]
[INFO] testproject-web .................................... SUCCESS [ 0.446 s]
[INFO] testproject-aggregator.............................. SUCCESS [ 0.021 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.653 s
使用聚合后,一个命令就可以一步到位!