内容简介:通过前面几篇文章,我把Maven中的坐标、在前后台分离,微服务大行其道的今天,我们的应用不再是一个超级大的包了,而是分成了多个子项目模块,每个子项目模块都是一个单独的工程项目。这就出现应用多的情况,此时如果你负责一个功能开发时,需要修改多个子项目模块时,就需要去修改不同的工程项目,当你开发完进行联调时,就需要一次构建多个工程项目,当出现问题时,又可能同时修改多个工程项目,此时你是一个一个工程项目的去构建呢?还是希望有一种办法一次性可以构建多个工程项目。当然了,我们肯定希望存在一种办法,我们通过点击某个按钮就
前言
通过前面几篇文章,我把Maven中的坐标、 仓库 、 依赖 、 生命周期 和插件这五大核心概念进行了总结,掌握了这五大核心概念,基本上也就把住了Maven的脉。从这篇文章开始,我们将从实际的应用场景出发,总结Maven的一些比较常见的用户,通过这些常见的用户来更好的把握Maven,学习Maven。
我们的需求
在前后台分离,微服务大行其道的今天,我们的应用不再是一个超级大的包了,而是分成了多个子项目模块,每个子项目模块都是一个单独的工程项目。这就出现应用多的情况,此时如果你负责一个功能开发时,需要修改多个子项目模块时,就需要去修改不同的工程项目,当你开发完进行联调时,就需要一次构建多个工程项目,当出现问题时,又可能同时修改多个工程项目,此时你是一个一个工程项目的去构建呢?还是希望有一种办法一次性可以构建多个工程项目。
当然了,我们肯定希望存在一种办法,我们通过点击某个按钮就可以开始构建多个工程项目,然后我们去喝杯咖啡的。那我们的这种需求在Maven中是否能实现呢?毫无疑问,Maven是可以搞定这个问题的,这就是Maven中的聚合,通过聚合我们就可以解决这个痛点问题。下面我就通过实际的项目来说说Maven中的聚合到底是个什么鬼。
聚合实战
现在我准备了两个基于Maven的子工程项目,分别是Project-A和Project-B。这两个项目都可以单独编译,单独构建。但是为了能够使用一条命令就可以构建Project-A和Project-B这两个子工程项目,我们需要创建一个额外的名为Project-Aggregator的工程项目,然后通过该模块构建整个项目的所有模块。由于这个Project-Aggregator的工程项目是一个聚合项目,它是不需要src和test目录的,只需要有一个POM就OK了,下面就是这个Project-Aggregator工程项目的POM文件内容:
<?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>com.jellythink.AggregatorDemo</groupId> <artifactId>Project-Aggregator</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Project-Aggregator</name> <modules> <module>../Project-A</module> <module>../Project-B</module> </modules> </project>
接下来,我们在Project-Aggregator工程项目目录下执行 mvn clean package
命令,就会看到以下输出:
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] Project-A [INFO] Project-B [INFO] Project-Aggregator [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Project-A 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ Project-A --- [INFO] Deleting E:\Code\Spring\Project-A\target [INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ Project-A --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\Code\Spring\Project-A\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ Project-A --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\Code\Spring\Project-A\target\classes [INFO] [INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ Project-A --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\Code\Spring\Project-A\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ Project-A --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\Code\Spring\Project-A\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ Project-A --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.jellythink.AggregatorDemo.AppTest [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 s - in com.jellythink.AggregatorDemo.AppTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ Project-A --- [INFO] Building jar: E:\Code\Spring\Project-A\target\Project-A-1.0-SNAPSHOT.jar [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Project-B 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ Project-B --- [INFO] Deleting E:\Code\Spring\Project-B\target [INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ Project-B --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\Code\Spring\Project-B\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ Project-B --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\Code\Spring\Project-B\target\classes [INFO] [INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ Project-B --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\Code\Spring\Project-B\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ Project-B --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to E:\Code\Spring\Project-B\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ Project-B --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.jellythink.AggregatorDemo.AppTest [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.046 s - in com.jellythink.AggregatorDemo.AppTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ Project-B --- [INFO] Building jar: E:\Code\Spring\Project-B\target\Project-B-1.0-SNAPSHOT.jar [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Project-Aggregator 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ Project-Aggregator --- [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] Project-A .......................................... SUCCESS [ 3.513 s] [INFO] Project-B .......................................... SUCCESS [ 1.424 s] [INFO] Project-Aggregator ................................. SUCCESS [ 0.047 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 5.093 s [INFO] Finished at: 2019-04-22T21:54:08+08:00 [INFO] Final Memory: 19M/274M [INFO] ------------------------------------------------------------------------
从输出可以看到,我们在构建Project-Aggregator项目时,Project-A和Project-B就会一同被构建,在存在多个项目时,这是非常方便的。
总结
对于聚合,内容不多,但是这种使用手法在实际工作中我们也会碰到,以后你在碰到这种用法时,不要疑惑。希望这篇文章能够帮助到你,更加丰富你的Maven知识,让你对Maven的使用有一个更新的认识。
果冻想,认真玩技术的地方。
2019年4月22日,于内蒙古呼和浩特。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 浅析红蓝对抗中攻击方基础设施的日志聚合和监控
- 监控聚合器系列之: open-falcon新聚合器polymetric
- elasticsearch学习笔记(七)——快速入门案例实战之电商网站商品管理:嵌套聚合,下钻分析,聚合分析
- mongodb高级聚合查询
- MongoDB聚合(aggregate)
- mongodb 聚合管道
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Android和PHP开发最佳实践
黄隽实 / 机械工业出版社华章公司 / 2013-3-20 / 79.00元
本书是国内第一本同时讲述Android客户端开发和PHP服务端开发的经典著作。 本书以一个完整的微博应用项目实例为主线,由浅入深地讲解了Android客户端开发和PHP服务端开发的思路和技巧。从前期的产品设计、架构设计,到客户端和服务端的编码实现,再到性能测试和系统优化,以及最后的打包发布,完整地介绍了移动互联网应用开发的过程。同时,本书也介绍了Android系统中比较有特色的功能,比如Go......一起来看看 《Android和PHP开发最佳实践》 这本书的介绍吧!