以下内容引用自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-ui和app-desktop-ui项目的构建。
    • 使用持续集成(CI) 服务器,比如Jenkins,来自行管理构建自动化。(省略)
    • 使用脚本实现(Linux/Windows)(省略)

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

    maven-invoker-plugin插件详细用法参考:

    准备环境:

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

    2、在C:\MVN下创建bus-core-api项目,在C:\MVN\projects下创建app-web-uiapp-desktop-ui项目。

    目录结构如下:

    1. ├─bus-core-api
    2. ├─src
    3. ├─main
    4. └─java
    5. └─com
    6. └─jsoft
    7. └─test
    8. └─test
    9. └─java
    10. └─com
    11. └─jsoft
    12. └─test
    13. └─target
    14. ├─classes
    15. └─com
    16. └─jsoft
    17. └─test
    18. ├─invoker-reports
    19. ├─maven-archiver
    20. ├─surefire-reports
    21. └─test-classes
    22. └─com
    23. └─jsoft
    24. └─test
    25. └─projects
    26. ├─app-desktop-ui
    27. ├─src
    28. ├─main
    29. └─java
    30. └─com
    31. └─jsoft
    32. └─test
    33. └─test
    34. └─java
    35. └─com
    36. └─jsoft
    37. └─test
    38. └─target
    39. ├─classes
    40. └─com
    41. └─jsoft
    42. └─test
    43. ├─maven-archiver
    44. ├─surefire
    45. ├─surefire-reports
    46. └─test-classes
    47. └─com
    48. └─jsoft
    49. └─test
    50. └─app-web-ui
    51. ├─src
    52. ├─main
    53. └─java
    54. └─com
    55. └─jsoft
    56. └─test
    57. └─test
    58. └─java
    59. └─com
    60. └─jsoft
    61. └─test
    62. └─target
    63. ├─classes
    64. └─com
    65. └─jsoft
    66. └─test
    67. ├─maven-archiver
    68. ├─surefire
    69. ├─surefire-reports
    70. └─test-classes
    71. └─com
    72. └─jsoft
    73. └─test

    app-web-ui项目的pom.xml

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    3. <modelVersion>4.0.0</modelVersion>
    4. <groupId>com.jsoft.test</groupId>
    5. <artifactId>app-web-ui</artifactId>
    6. <packaging>jar</packaging>
    7. <version>1.0-SNAPSHOT</version>
    8. <name>app-web-ui</name>
    9. <url>http://maven.apache.org</url>
    10. <dependencies>
    11. <dependency>
    12. <groupId>junit</groupId>
    13. <artifactId>junit</artifactId>
    14. <version>3.8.1</version>
    15. <scope>test</scope>
    16. </dependency>
    17. <dependency>
    18.     <groupId>com.jsoft.test</groupId>
    19.     <artifactId>bus-core-api</artifactId>
    20.     <version>1.0-SNAPSHOT</version>
    21.     <scope>system</scope>
    22.     <systemPath>C:\MVN\bus-core-api\target\bus-core-api-1.0-SNAPSHOT.jar</systemPath>
    23. </dependency>
    24. </dependencies>
    25. </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

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    3. <modelVersion>4.0.0</modelVersion>
    4. <groupId>com.jsoft.test</groupId>
    5. <artifactId>app-desktop-ui</artifactId>
    6. <packaging>jar</packaging>
    7. <version>1.0-SNAPSHOT</version>
    8. <name>app-desktop-ui</name>
    9. <url>http://maven.apache.org</url>
    10. <dependencies>
    11. <dependency>
    12. <groupId>junit</groupId>
    13. <artifactId>junit</artifactId>
    14. <version>3.8.1</version>
    15. <scope>test</scope>
    16. </dependency>
    17. <dependency>
    18.     <groupId>com.jsoft.test</groupId>
    19.     <artifactId>bus-core-api</artifactId>
    20.     <version>1.0-SNAPSHOT</version>
    21.     <scope>system</scope>
    22.     <systemPath>C:\MVN\bus-core-api\target\bus-core-api-1.0-SNAPSHOT.jar</systemPath>
    23. </dependency>
    24. </dependencies>
    25. </project>

    bus-core-api项目的pom.xml

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    3. <modelVersion>4.0.0</modelVersion>
    4. <groupId>com.jsoft.test</groupId>
    5. <artifactId>bus-core-api</artifactId>
    6. <packaging>jar</packaging>
    7. <version>1.0-SNAPSHOT</version>
    8. <name>bus-core-api</name>
    9. <url>http://maven.apache.org</url>
    10. <dependencies>
    11. <dependency>
    12. <groupId>junit</groupId>
    13. <artifactId>junit</artifactId>
    14. <version>3.8.1</version>
    15. <scope>test</scope>
    16. </dependency>
    17. </dependencies>
    18. <build>
    19. <plugins>
    20. <plugin>
    21.       <artifactId>maven-invoker-plugin</artifactId>
    22.       <version>2.0.0</version>
    23.       <configuration>
    24.       <debug>true</debug>
    25.       <projectsDirectory>C:\MVN\projects</projectsDirectory>
    26.       </configuration>
    27.       <executions>
    28. <execution>
    29. <id>id-integration-test</id>
    30. <goals>
    31. <goal>run</goal>
    32. </goals>
    33. </execution>
    34.       </executions>
    35.     </plugin>
    36. </plugins>
    37. </build>
    38. </project>

    注意:<projectsDirectory>节点指定的是app-web-uiapp-desktop-ui项目的目录C:\MVN\projects

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

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

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

    此时在C:\MVN\bus-core-api执行命令:

    1. mvn integration-test

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

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

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