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

原创 2018年04月15日 22:11:45

以下内容引用自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

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenyao1994/article/details/79954182

如何编写maven plugin

基础 当maven内置的功能不能满足需求的时候怎么办,那就只能给它写插件了。 (话说回来,给maven扩展只能写一个很完整的插件,而不能是一个简单的script,真的是太笨重了) 网络...
  • tianwei7518
  • tianwei7518
  • 2014-03-27 13:36:55
  • 869

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

一、场景 设想一个团队正在开发一个项目 bus-core-api,并且有其他两个项目 app-web-ui 和 app-desktop-ui 依赖于这个项目。 bus-core-api 项目为 1...
  • liupeifeng3514
  • liupeifeng3514
  • 2018-03-28 13:58:32
  • 39

j2ee项目自动化构建工具_maven(一)

java项目管理工具,个人经历的技术发展三个阶段。ant+ivy、maven、gradle。目前项目中一直在使用第一种技术来实现,作为技术人员要善于学习新技术,技术没有好坏,只有适合最佳。maven目...
  • geyouchao
  • geyouchao
  • 2016-04-02 15:11:45
  • 1656

创建maven关联项目

在eclipse下构建maven项目,该项目由多个子模块组成。 1.创建一个父项目 NEW -->project-->maven-->maven Project,点击下一步,进入new m...
  • u012930316
  • u012930316
  • 2016-10-31 00:21:04
  • 1744

Hudson+Maven+SVN

  • 2013年04月08日 17:07
  • 380KB
  • 下载

自动化构建-maven

Maven,JAVA世界里最炙手可热的自动化构建工具,与eclipse一起成为JAVA开发的必备工具,本文仅对Maven的日常使用和执行机制做一个入门级介绍,想要获得对Maven的深入理解可以参考网上...
  • melancholy123
  • melancholy123
  • 2017-04-27 00:56:57
  • 555

Maven插件的编写

Eclipse上如果想要开发Maven的插件,首先保证该eclipse已经安装了m2e插件。IDEA则自带了Maven的插件,可以直接进行开发。Eclipse 新建一个Maven工程 2 选择由ar...
  • lyjshen
  • lyjshen
  • 2016-08-21 17:24:41
  • 3344

使用eclipse mybatis generator插件在maven 项目中自动构建代码

本文是参考的别人的文章,因为他的参数说明还算详细,但是有些是不对的,本人实践中完善了一下,仅作为本人记录之用,感谢原作者。 原文地址:http://cqh520llr.iteye.com/blog/...
  • qq_33802316
  • qq_33802316
  • 2017-09-16 13:34:39
  • 212

Eclipse中多个项目关联

最近想试试把多个项目关联在一起,是出于在工作的时候看到项目都是模块化的,一个模块就是一个项目,这样便于开发。于是自己尝试搭建一下这样的 但是在网上找了好久,觉得都不是我想要的。于是自己慢慢的摸索出来...
  • xiongyayun428
  • xiongyayun428
  • 2011-11-30 09:36:27
  • 14676
收藏助手
不良信息举报
您举报文章:Maven实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)
举报原因:
原因补充:

(最多只允许输入30个字)