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

时间: 2024-10-13 00:18:52

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

Maven 学习(二)使用eclipse构建Maven项目及发布一个Maven项目

开发环境: Eclipse Jee Mars(截止2015年12月1日目前的最新版eclipse4.5),下载地址:http://www.eclipse.org/downloads/ 因为此版本已经集成了M2E的插件,再者Mars版本的eclipse也比较稳定,可以省一些不必要的麻烦. 一.构建Maven项目 用eclipse构建maven项目之前我们需要为eclipse做一些必要的配置 一些必要的配置 1.点击eclipse菜单栏的Window下的preferences,选择Maven菜单 2

Maven配置和打包以及使用Eclipse构建Maven项目

Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.本文仅对Eclipse中如何安装.配置和使用Maven进行了介绍.完全step by step. 如果觉得本文对你有用,请移步到:http://download.csdn.net/detail/qjyong/5582071 下载PDF版,http://download.csdn.net/detail/qjyong/5582087 下载配套示例项目源代码. 1.   Eclipse-jee的安装 进入ecli

maven入门(5)使用eclipse构建maven项目

1. 安装m2eclipse插件    要用Eclipse构建Maven项目,我们需要先安装meeclipse插件    点击eclipse菜单栏Help->Eclipse Marketplace搜索到插件Maven Integration for Eclipse 并点击安装即可,如下图: 安装成成之后我们在Eclipse菜单栏中点击File->New->Other,在弹出的对话框中会看到如下图所示: 2. 构建Maven项目 以eclipse3.6为例 1)创建简单Maven项目 点击

JAVAWEB开发之Maven的入门详解——Maven的安装以及项目的结构和Maven的使用以及私服的搭建与配置

什么是Maven? 翻译为专家,内行.Maven是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,项目管理和项目信息管理.那么怎么样才算是理想的项目构建呢?理想的项目构建就是必须具备高度自动化,跨平台,可重用的组件,标准化这些特性. 什么是依赖?为什么要进行依赖管理? - 所谓的依赖就是自动下载.进行依赖管理主要是为了统一的对这些依赖进行管理. 都有哪些项目信息? -项目名称描述,开发者信息,开发人员信息,项目的版本号等等. 什么项目构建? - 所谓的项目构建就是对项目进行清理.编译

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

 1 若想让maven项目依赖另外一个maven项目,被依赖的项目要在maven仓库中有相应的jar包,所以要对依赖的项目执行mvninstall命令. 2 新建第二个项目模块HelloFriend目录及约定的目录结构 HelloFriend --src -----main ----------java ----------resources -----test ---------java ---------resources --pom.xml 3 在项目HelloFriend根目录建立p

Maven——服务于Java平台的自动化构建工具

Maven有一个远程中心库来统一各个项目以及对应的版本. 将远程库的jar包下载到本地库,并通过在pom.xml内配置,来自动导入其他项目. 构建:以"Java源文件""框架配置文件""JSP""HTML""图片"等资源为原材料,去"生产"一个可运行项目的过程. 如果没有Maven 一个项目就是一个工程,如果项目十分庞大,就不适合用package划分模块.最好是每个模块对应一个工程,便于

使用eclipse构建maven和发布maven的项目

对于maven的部署和安装插件不熟的同学可以看一下上两篇文章maven的部署和安装: 此笔记已经集成了maven的插件. 一.构建Maven项目 用eclipse构建maven项目之前我们需要为eclipse做一些必要的配置 一些必要的配置 1.点击eclipse菜单栏的Window下的preferences,选择Maven菜单 2.选择Installations,选择Add,添加你本地安装的maven安装目录,如下所示. 3.点击Apply应用,然后选择左侧菜单的User Settings,为

【干货】手动搭建一套可自动化构建的微服务框架

如何阅读 本文篇幅较长,我花了两天的时间完成,大约需要半小时阅读. 本文分为理论篇和实践篇,由于代码在手机端展示并不理想,建议大家收藏之后在PC端阅读.实践篇边动手边阅读更有助于理解. 在阅读的同时,也麻烦各位大佬多多分享! 本文你将学到什么? 本文将以原理+实战的方式,首先对"微服务"相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构你的整个应用程序将会被拆分成一个个功能独立的子系统,独立运行

使用maven来管理java项目

初学maven,简单总结一下学习心得,若有不对的地方,欢迎各位大神给我指正~ 总结分为6个部分 maven概述 maven安装 maven项目结构和创建方法 maven配置文件settings.xml 项目对象文件pom.xml解析 eclipse插件安装 一.maven概述 要用java实现一个后台系统,可能需要涉及很多模块. web应用服务器.文件服务器.db 等等. 我们要开发这些模块,需要先把他们各自需要依赖的jar包或者项目下载打包好,然后配置到项目的classpath中. 这些应用在