以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_build_automation.html:
注意:由于时间问题,原文的方法已经无法使用,在此我更新了最新的方法去实现。同时也是官方原版的方法:https://www.tutorialspoint.com/maven/maven_build_automation.htm。
一、场景
设想一个团队正在开发一个项目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插件操作实现详解
maven-invoker-plugin插件详细用法参考:
准备环境:
1、建立目录C:\MVN和C:\MVN\projects。
2、在C:\MVN下创建bus-core-api项目,在C:\MVN\projects下创建app-web-ui和app-desktop-ui项目。
目录结构如下:
- ├─bus-core-api
- │ ├─src
- │ │ ├─main
- │ │ │ └─java
- │ │ │ └─com
- │ │ │ └─jsoft
- │ │ │ └─test
- │ │ └─test
- │ │ └─java
- │ │ └─com
- │ │ └─jsoft
- │ │ └─test
- │ └─target
- │ ├─classes
- │ │ └─com
- │ │ └─jsoft
- │ │ └─test
- │ ├─invoker-reports
- │ ├─maven-archiver
- │ ├─surefire-reports
- │ └─test-classes
- │ └─com
- │ └─jsoft
- │ └─test
- └─projects
- ├─app-desktop-ui
- │ ├─src
- │ │ ├─main
- │ │ │ └─java
- │ │ │ └─com
- │ │ │ └─jsoft
- │ │ │ └─test
- │ │ └─test
- │ │ └─java
- │ │ └─com
- │ │ └─jsoft
- │ │ └─test
- │ └─target
- │ ├─classes
- │ │ └─com
- │ │ └─jsoft
- │ │ └─test
- │ ├─maven-archiver
- │ ├─surefire
- │ ├─surefire-reports
- │ └─test-classes
- │ └─com
- │ └─jsoft
- │ └─test
- └─app-web-ui
- ├─src
- │ ├─main
- │ │ └─java
- │ │ └─com
- │ │ └─jsoft
- │ │ └─test
- │ └─test
- │ └─java
- │ └─com
- │ └─jsoft
- │ └─test
- └─target
- ├─classes
- │ └─com
- │ └─jsoft
- │ └─test
- ├─maven-archiver
- ├─surefire
- ├─surefire-reports
- └─test-classes
- └─com
- └─jsoft
- └─test
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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.jsoft.test</groupId>
- <artifactId>app-web-ui</artifactId>
- <packaging>jar</packaging>
- <version>1.0-SNAPSHOT</version>
- <name>app-web-ui</name>
- <url>http://maven.apache.org</url>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.jsoft.test</groupId>
- <artifactId>bus-core-api</artifactId>
- <version>1.0-SNAPSHOT</version>
- <scope>system</scope>
- <systemPath>C:\MVN\bus-core-api\target\bus-core-api-1.0-SNAPSHOT.jar</systemPath>
- </dependency>
- </dependencies>
- </project>
提示:为了测试,设置bus-core-api项目依赖为本地依赖。其中C:\MVN\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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.jsoft.test</groupId>
- <artifactId>app-desktop-ui</artifactId>
- <packaging>jar</packaging>
- <version>1.0-SNAPSHOT</version>
- <name>app-desktop-ui</name>
- <url>http://maven.apache.org</url>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.jsoft.test</groupId>
- <artifactId>bus-core-api</artifactId>
- <version>1.0-SNAPSHOT</version>
- <scope>system</scope>
- <systemPath>C:\MVN\bus-core-api\target\bus-core-api-1.0-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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.jsoft.test</groupId>
- <artifactId>bus-core-api</artifactId>
- <packaging>jar</packaging>
- <version>1.0-SNAPSHOT</version>
- <name>bus-core-api</name>
- <url>http://maven.apache.org</url>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-invoker-plugin</artifactId>
- <version>2.0.0</version>
- <configuration>
- <debug>true</debug>
- <projectsDirectory>C:\MVN\projects</projectsDirectory>
- </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:\MVN\projects。
由于maven-invoker-plugin插件绑定的Maven生命周期阶段为integration-test以上,所以在命令行上输入integration-test阶段及其以上的都可以触发。

详细的Maven生命周期参考:https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
此时在C:\MVN\bus-core-api执行命令:
- mvn integration-test

测试成功输出所有项目的jar包。
测试代码:https://github.com/easonjim/5_java_example/tree/master/maventest/test5
