以下内容引用自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插件的使用)的更多相关文章

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

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79726664 一.场景设想一个团队正在开发一个项目 bus-core-api,并 ...

  2. maven入门(1-4)使用eclipse构建maven项目

    1. 安装m2eclipse插件    要用Eclipse构建Maven项目,我们需要先安装meeclipse插件    点击eclipse菜单栏Help->Eclipse Marketplac ...

  3. Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建

    详解Jenkins +Maven+Tomcat+SVN +Apache项目持续集成 一:前言 1. Jenkins jenkins版本大全http://mirrors.jenkins-ci.org/ ...

  4. Eclipse+Maven整合开发Java项目(一)➣Maven基础环境配置

    概述 Maven是一个Java语言编写的开源项目管理工具,是Apache软件基金会的顶级项目.主要用于项目构建,依赖管理,项目信息管理.有些项目需要添加响应的依赖包,Maven就是公用包集合.存在远程 ...

  5. 3.将maven项目jar纳入maven仓库,Mave项目依赖另外一个Maven项目的案例

     1 若想让maven项目依赖另外一个maven项目.被依赖的项目要在maven仓库中有对应的jar包,所以要对依赖的项目运行mvninstall命令. 2 新建第二个项目模块HelloFrien ...

  6. jenkins+maven+svn实现springboot项目的自动化部署过程

    说明:部署springboot项目的jar 前提(参考:https://www.cnblogs.com/myitnews/p/11493779.html): 全局安全配置(前面配置过) 全局工具配置( ...

  7. 自动化构建工具maven

    Maven是目前最流行的自动化构建工具,对于生产环境下多框架.多模块整合开发有重要作用.Maven 是一款在大型项目开发过程中不可或缺的重要工具. 一.什么是构建? 构建并不是创建,创建一个工程并不等 ...

  8. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  9. 使用eclipse构建Maven项目及发布一个Maven项目

    开发环境: Eclipse Jee Mars(截止2015年12月1日目前的最新版eclipse4.5),下载地址:http://www.eclipse.org/downloads/ 因为此版本已经集 ...

随机推荐

  1. ios之UIScrollView

    UIScrollView 类负责所有基于 UIKit 的滚动操作. 一.创建 [java] view plaincopy     CGRect bounds = [ [ UIScreen mainSc ...

  2. GIMP做成颜色蒙板

    效果图: 原始的美女图片上盖了一层的颜色,这个是想出来的效果,只是用来实践学到的技能,具体的场景还没有确定. 1/首先打开原始的美女图片: 2/然后在添加一张新的图片,作为新的图层添加进来: 这样的话 ...

  3. Python、机器学习、计算机视觉、深度学习入门

    1.简明Python教程 2.Python计算机视觉编程 3.机器学习实践 4.吴恩达机器学习 5.李飞飞深度学习与计算机视觉

  4. Python_编程题集_001_词法解析

    1.词法解析: 我的是名字是ths,今年18岁 语法分析后得到结果如下: 数字:18 中文:我的名字是 今年 岁 拼音:ths 符号:,. 请编写程序实现该词法分析功能 string模块解: impo ...

  5. LeetCode(39) Combination Sum

    题目 Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C w ...

  6. PAT Basic 1059

    1059 C语言竞赛 C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 0.冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……). ...

  7. 流编辑器sed知识点总结

    sed(流文本编辑器)     每次读取一行到模式空间中,     修改的sed模式空间中的内容,并不会修改源文件,     继而输出模式空间的内容,     最后删除模式空间中的内容. sed [O ...

  8. bounds 和frame区别

    仔细看下这个图就知道了

  9. 九度oj 题目1017:还是畅通工程

    题目描述:     某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可 ...

  10. iOS学习笔记03-UITableView

    一.UITableView基本介绍 默认的UITableView有2种风格: UITableViewStylePlain(不分组) UITableViewStyleGrouped(分组) UITabl ...