Maven 教程(15)— 实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79726664
一、场景
设想一个团队正在开发一个项目 bus-core-api,并且有其他两个项目 app-web-ui 和 app-desktop-ui 依赖于这个项目。
bus-core-api 项目为 1.0 快照版本。
app-web-ui 项目使用的是 bus-core-api 项目的 1.0 快照。
app-desktop-ui 项目使用的是 bus-core-api 项目的 1.0 快照。
现在 app-web-ui 和 app-desktop-ui 项目的团队要求的是不管 bus-core-api 项目何时变化,他们的构建过程都应当可以启动。
使用快照确保了最新的 bus-core-api 项目会被使用,但要达到上面的要求,我们还需要做一些额外的工作。
提示:其实这个场景有一点矛盾,但是为了演示效果,可以这样理解,即当 bus-core-api 项目构建时,自动构建 app-web-ui 和 app-desktop-ui 项目。
二、构建方式选择
有以下三种构建方式:
在 bus-core-api 项目的 pom.xml 文件中添加一个 maven-invoker-plugin 插件操作来启动 app-web-ui 和 app-desktop-ui 项目的构建;
使用持续集成(CI) 服务器,比如Jenkins,来自行管理构建自动化(省略);
使用脚本实现(Linux/Windows)(省略)。
三、使用 maven-invoker-plugin 插件操作实现详解
源码地址:https://gitee.com/liupeifeng3514/maven_automation_construction
maven-invoker-plugin插件详细用法参考:http://maven.apache.org/plugins/maven-invoker-plugin/ 准备环境: 建立目录 C:\Maven-Build-Automation 和 C:\Maven-Build-Automation\projects;
在 C:\Maven-Build-Automation 下 创建 bus-core-api 项目,在 C:\Maven-Build-Automation\projects 下创建 app-web-ui 和 app-desktop-ui 项目。
目录结构如下:
├─bus-core-api
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ └─test
│ │ └─java
│ └─target
│ ├─classes
│ ├─invoker-reports
│ ├─maven-archiver
│ ├─surefire-reports
│ └─test-classes
└─projects
├─app-desktop-ui
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ └─test
│ │ └─java
│ └─target
│ ├─classes
│ ├─maven-archiver
│ ├─surefire
│ ├─surefire-reports
│ └─test-classes
└─app-web-ui
├─src
│ ├─main
│ │ └─java
│ └─test
│ └─java
└─target
├─classes
├─maven-archiver
├─surefire
├─surefire-reports
└─test-classes
app-web-ui项目的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>app-web-ui</groupId>
<artifactId>app-web-ui</artifactId>
<version>1.0</version>
<name>网页 UI</name>
<description>app-web-ui 依赖 bus-core-api</description> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>C:\Maven-Build-Automation\bus-core-api\target\bus-core-api-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
</dependencies>
</project>
提示:为了测试,设置 bus-core-api 项目依赖为本地依赖。其中C:\Maven-Build-Automation\bus-core-api\target\bus-core-api-1.0-SNAPSHOT.jar为
bus-core-api项目生成的jar包最终存放位置。
app-desktop-ui项目的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>app-desktop-ui</groupId>
<artifactId>app-desktop-ui</artifactId>
<version>1.0</version>
<name>应用程序桌面 UI</name>
<description>app-desktop-ui 依赖 bus-core-api</description> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>C:\Maven-Build-Automation\bus-core-api\target\bus-core-api-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
</dependencies>
</project>
bus-core-api项目的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>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>总线核心 Api</name>
<description>总线核心 Api</description> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <build>
<plugins>
<plugin>
<artifactId>maven-invoker-plugin</artifactId>
<version>2.0.0</version>
<configuration>
<debug>true</debug>
<projectsDirectory>C:\Maven-Build-Automation\projects</projectsDirectory>
<cloneProjectsTo>${project.build.directory}</cloneProjectsTo>
<!-- 此种方式一直没有测试成功,也没有找出是什么问题
<pomIncludes>
<pomInclude>C:\Maven-Build-Automation\projects\app-web-ui\pom.xml</pomInclude>
<pomInclude>C:\Maven-Build-Automation\projects\app-desktop-ui\pom.xml</pomInclude>
</pomIncludes>
-->
</configuration>
<executions>
<execution>
<id>id-integration-test</id>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
注意:<projectsDirectory>节点指定的是app-web-ui和app-desktop-ui项目的目录C:\Maven-Build-Automation\projects。
由于 maven-invoker-plugin 插件绑定的 Maven 生命周期阶段为 integration-test 以上,所以在命令行上输入 integration-test 阶段及其以上的都可以触发。

详细的Maven生命周期参考:https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
此时在C:\Maven-Build-Automation\bus-core-api执行命令:
mvn integration-test
C:\Maven-Build-Automation\bus-core-api>mvn integration-test
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building 总线核心 Api 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ bus-core-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ bus-core-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Maven-Build-Automation\bus-core-api\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ bus-core-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ bus-core-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ bus-core-api ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ bus-core-api ---
[INFO] Building jar: C:\Maven-Build-Automation\bus-core-api\target\bus-core-api-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-invoker-plugin:2.0.0:run (id-integration-test) @ bus-core-api ---
[INFO] Building: app-desktop-ui\pom.xml
[INFO] ..SUCCESS (3.5 s)
[INFO] Building: app-web-ui\pom.xml
[INFO] ..SUCCESS (3.5 s)
[INFO] -------------------------------------------------
[INFO] Build Summary:
[INFO] Passed: 2, Failed: 0, Errors: 0, Skipped: 0
[INFO] -------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.647 s
[INFO] Finished at: 2018-03-28T13:49:08+08:00
[INFO] Final Memory: 16M/161M
[INFO] ------------------------------------------------------------------------ C:\Maven-Build-Automation\bus-core-api>
测试成功输出所有项目的jar包。
Maven 教程(15)— 实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)的更多相关文章
- Maven实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)
以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_build_automation.html: 注意: ...
- Maven教程2(Eclipse配置及maven项目)
Maven教程1(介绍安装和配置) Eclipse中配置maven 1.Eclipse中默认集成的有Maven 可以使用默认的,本地仓库在当前用户下的.m2文件夹下. 2.配置我们自己安装的maven ...
- 转: maven进阶:一个多模块项目
一个多模块项目通过一个父POM 引用一个或多个子模块来定义.父项目,通过以下配置,将子项目关联. <packaging>pom</packaging> <modules& ...
- Maven教程(转载)
转载自:http://www.yiibai.com/maven/ Apache Maven是一个软件项目管理和综合工具.基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报 ...
- maven进阶:一个多模块项目
一个多模块项目通过一个父POM 引用一个或多个子模块来定义.父项目,通过以下配置,将子项目关联. <packaging>pom</packaging> <modules& ...
- maven 学习---Maven教程
Apache Maven是一个软件项目管理和综合工具.基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件. 本教程将介绍如何使用Maven在Java开发,或任何其 ...
- maven - Eclipse构建maven项目
前面的博文已经介绍了如何安装maven,本文将记录如何在Eclipse下构建maven项目. 一.Eclipse maven插件安装 关于安装Eclipse maven插件,网上有很多方法,这里推荐一 ...
- 如何使用maven建一个web3.0的项目
使用eclipse手动建一个maven的web project可能会有版本不合适的情况,例如使用spring的websocket需要web3.0什么的,不全面的修改可能会出现各种红叉,甚是苦恼.我从我 ...
- maven也是apache下的项目
maven也是apache下的项目,你看maven官网了,域名都在Apache下
随机推荐
- vue v-for 使用问题整理
今天使用v-for指令的时候遇到一个错误 [Vue warn]: Error in render: "TypeError: Cannot read property 'children' o ...
- JAVA操作InfluxDB的一个Demo
一.基础连接类 package com.test.repository.utils; import com.dcits.domain.entry.bo.common.InfluxDbRow; impo ...
- python 数据结构之图的储存方式
参考链接:https://blog.csdn.net/u014281392/article/details/79120406 所描述的图的结构为: 下面介绍不同的储存方式,我想不必详细分别是每个名称都 ...
- Mac切换root用户
sudo su 然后输入密码,用户名显示sh-3.2#,这里的#代表的含义就是具有root权限 这时,再输入 su - 就可以进入root用户 那接下来,如果我们要切换至普通用户该怎么做? su - ...
- web安全常用工具
简单工具:明小子,阿d注入工具,namp,穿山甲,御剑,旁注 漏洞扫描工具:appscan .awvs.nbsi 端口扫描工具:nessus.namp.天镜脆弱性扫描与管理系统 数据库备份工具:中国菜 ...
- Fundebug录屏插件更新至0.4.0,修复BUG,优化性能
摘要: 录屏功能更加强大,欢迎免费试用! 关于Fundebug录屏功能 Fundebug是专业的程序BUG监控服务,当线上应用出现BUG的时候,我们可以第一时间报警,帮助开发者及时发现BUG,提高De ...
- Mybatis 子查询
在查询数据库时,需要以查询结果为查询条件进行关联查询. 在mybatis中通过association标签和collection标签实现子查询. 1. collection(集合)和associatio ...
- linux突然不能上网,eth0网卡消失
情况:之前可以正常浏览网页,没有动其它的地方,浏览器突然不能上网 ifconfig # 发现eth0网卡不见了,只有lo卡 ifconfig -a # 发现了eth0,但是没有IP地址 dhclien ...
- node-gyp 在此解决方案中一次生成一个项目。若要启用并行生成,请添加“/m”开关。
在此解决方案中一次生成一个项目.若要启用并行生成,请添加“/m”开关. MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”.要解决此问题, ...
- Java多线程编程核心技术-第1章-Java多线程技能-读书笔记
第 1 章 Java 多线程技能 本章主要内容 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关的问题 1.1 进程和多线程的概念及线程的优点 进程是操作系统结构的基础:是一次程 ...