zoukankan      html  css  js  c++  java
  • 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:MVNprojects

    2、在C:MVN下创建bus-core-api项目,在C:MVNprojects下创建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:MVNus-core-api	argetus-core-api-1.0-SNAPSHOT.jar</systemPath>
        </dependency>
      </dependencies>
    </project>        

    提示:为了测试,设置bus-core-api项目依赖为本地依赖。其中C:MVNus-core-api argetus-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:MVNus-core-api	argetus-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:MVNprojects</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:MVNprojects

    由于maven-invoker-plugin插件绑定的Maven生命周期阶段为integration-test以上,所以在命令行上输入integration-test阶段及其以上的都可以触发。

    详细的Maven生命周期参考:https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

    此时在C:MVNus-core-api执行命令:

    mvn integration-test

    测试成功输出所有项目的jar包。

    测试代码:https://github.com/easonjim/5_java_example/tree/master/maventest/test5

  • 相关阅读:
    【2020-07-04】人生十三信条
    【2020-07-03】人生十三信条
    【2020-07-02】人生十三信条
    【2020-07-01】人生十三信条
    【一句日历】2020年7月
    团队第三次作业评分 需求规格说明书
    软工评分工具
    中期成绩汇总
    软件工程第四次作业评分
    软件工程第五次作业评分
  • 原文地址:https://www.cnblogs.com/EasonJim/p/6854647.html
Copyright © 2011-2022 走看看