首页 > 代码库 > Maven实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)

Maven实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)

以下内容引用自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-uiapp-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-uiapp-desktop-ui项目的团队要求的是不管bus-core-api项目何时变化,他们的构建过程都应当可以启动。

使用快照确保了最新的bus-core-api项目会被使用,但要达到上面的要求,我们还需要做一些额外的工作。

提示:其实这个场景有一点矛盾,但是为了演示效果,可以这样理解,即当bus-core-api项目构建时,自动构建app-web-uiapp-desktop-ui项目。

二、构建方式选择

  • bus-core-api项目的pom.xml文件中添加一个maven-invoker-plugin插件操作来启动app-web-uiapp-desktop-ui项目的构建。
  • 使用持续集成(CI) 服务器,比如Jenkins,来自行管理构建自动化。(省略)
  • 使用脚本实现(Linux/Windows)(省略)

三、使用maven-invoker-plugin插件操作实现详解

maven-invoker-plugin插件详细用法参考:http://maven.apache.org/plugins/maven-invoker-plugin/

准备环境:

1、建立目录C:\MVNC:\MVN\projects

2、在C:\MVN下创建bus-core-api项目,在C:\MVN\projects下创建app-web-uiapp-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.jarbus-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-uiapp-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

 

Maven实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)