• 【第十四篇】- Maven 自动化构建


    Maven 自动化构建

    自动化构建定义了这样一种场景: 在一个项目成功构建完成后,其相关的依赖工程即开始构建,这样可以保证其依赖项目的稳定。

    比如一个团队正在开发一个项目 bus-core-api, 并且有其他两个项目 app-web-ui 和 app-desktop-ui 依赖于这个项目。

    app-web-ui 项目使用的是 bus-core-api 项目的 1.0 快照:

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>app-web-ui</groupId>
    7. <artifactId>app-web-ui</artifactId>
    8. <version>1.0</version>
    9. <packaging>jar</packaging>
    10. <dependencies>
    11. <dependency>
    12. <groupId>bus-core-api</groupId>
    13. <artifactId>bus-core-api</artifactId>
    14. <version>1.0-SNAPSHOT</version>
    15. </dependency>
    16. </dependencies>
    17. </project>

    app-desktop-ui 项目使用的是 bus-core-api 项目的 1.0 快照:

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>app-desktop-ui</groupId>
    7. <artifactId>app-desktop-ui</artifactId>
    8. <version>1.0</version>
    9. <packaging>jar</packaging>
    10. <dependencies>
    11. <dependency>
    12. <groupId>bus-core-api</groupId>
    13. <artifactId>bus-core-api</artifactId>
    14. <version>1.0-SNAPSHOT</version>
    15. </dependency>
    16. </dependencies>
    17. </project>

    bus-core-api 项目:

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>bus-core-api</groupId>
    7. <artifactId>bus-core-api</artifactId>
    8. <version>1.0-SNAPSHOT</version>
    9. <packaging>jar</packaging>
    10. </project>

    现在 app-web-ui 和 app-desktop-ui 项目的团队要求不管 bus-core-api 项目何时变化,他们的构建过程都应当可以启动。

    使用快照可以确保最新的 bus-core-api 项目被使用,但要达到上面的要求,我们还需要做一些额外的工作。

    可以使用两种方式:

    • 在 bus-core-api 项目的 pom 文件中添加一个 post-build 目标操作来启动 app-web-ui 和 app-desktop-ui 项目的构建。
    • 使用持续集成(CI) 服务器,比如 Hudson,来自行管理构建自动化。

      使用 Maven

      修改 bus-core-api 项目的 pom.xml 文件。

      1. <project xmlns="http://maven.apache.org/POM/4.0.0"
      2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
      4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
      5. <modelVersion>4.0.0</modelVersion>
      6. <groupId>bus-core-api</groupId>
      7. <artifactId>bus-core-api</artifactId>
      8. <version>1.0-SNAPSHOT</version>
      9. <packaging>jar</packaging>
      10. <build>
      11. <plugins>
      12. <plugin>
      13. <artifactId>maven-invoker-plugin</artifactId>
      14. <version>1.6</version>
      15. <configuration>
      16. <debug>true</debug>
      17. <pomIncludes>
      18. <pomInclude>app-web-ui/pom.xml</pomInclude>
      19. <pomInclude>app-desktop-ui/pom.xml</pomInclude>
      20. </pomIncludes>
      21. </configuration>
      22. <executions>
      23. <execution>
      24. <id>build</id>
      25. <goals>
      26. <goal>run</goal>
      27. </goals>
      28. </execution>
      29. </executions>
      30. </plugin>
      31. </plugins>
      32. </build>
      33. </project>

      打开命令控制台,切换到 C:\ > MVN > bus-core-api 目录下,然后执行以下命令。

      C:\MVN\bus-core-api>mvn clean package -U

      执行完命令后,Maven 将开始构建项目 bus-core-api。

      1. 执行完命令后,Maven 将开始构建项目 bus-core-api
      2. [INFO] Scanning for projects...
      3. [INFO] ------------------------------------------------------------------
      4. [INFO] Building bus-core-api
      5. [INFO] task-segment: [clean, package]
      6. [INFO] ------------------------------------------------------------------
      7. ...
      8. [INFO] [jar:jar {execution: default-jar}]
      9. [INFO] Building jar: C:\MVN\bus-core-ui\target\
      10. bus-core-ui-1.0-SNAPSHOT.jar
      11. [INFO] ------------------------------------------------------------------
      12. [INFO] BUILD SUCCESSFUL
      13. [INFO] ------------------------------------------------------------------

      bus-core-api 构建成功后,Maven 将开始构建 app-web-ui 项目。

      1. [INFO] ------------------------------------------------------------------
      2. [INFO] Building app-web-ui
      3. [INFO] task-segment: [package]
      4. [INFO] ------------------------------------------------------------------
      5. ...
      6. [INFO] [jar:jar {execution: default-jar}]
      7. [INFO] Building jar: C:\MVN\app-web-ui\target\
      8. app-web-ui-1.0-SNAPSHOT.jar
      9. [INFO] ------------------------------------------------------------------
      10. [INFO] BUILD SUCCESSFUL
      11. [INFO] ------------------------------------------------------------------

      app-web-ui 构建成功后,Maven 将开始构建 app-desktop-ui 项目。

      1. [INFO] ------------------------------------------------------------------
      2. [INFO] Building app-desktop-ui
      3. [INFO] task-segment: [package]
      4. [INFO] ------------------------------------------------------------------
      5. ...
      6. [INFO] [jar:jar {execution: default-jar}]
      7. [INFO] Building jar: C:\MVN\app-desktop-ui\target\
      8. app-desktop-ui-1.0-SNAPSHOT.jar
      9. [INFO] -------------------------------------------------------------------
      10. [INFO] BUILD SUCCESSFUL
      11. [INFO] -------------------------------------------------------------------

      使用持续集成服务器(CI)

      如果使用 CI 服务器更,我们每次的一个新项目,比如说实例中的 app-mobile-ui,添加为依赖 bus-core-api 项目时,开发者就不需要更新 bus-core-api 项目的 pom。Hudson 将会借助 Maven 的依赖管理功能实现工程的自动化创建。

      Hudson 把每个项目构建当成一次任务。在一个项目的代码提交到 SVN (或者任何映射到 Hudson 的代码管理工具)后,Hudson 将开始项目的构建任务,并且一旦此构建任务完成,Hudson 将自动启动其他依赖的构建任务(其他依赖项目的构建)。

      在上面的例子中,当 bus-core-ui 源代码在 SVN 更新后,Hudson 开始项目构建。一旦构建成功,Hudson 自动地查找依赖的项目,然后开始构建 app-web-ui 和 app-desktop-ui 项目。

  • 相关阅读:
    web端生成pdf,前端生成pdf导出并自定义页眉页脚
    触控笔哪个牌子好用?平板电脑触控笔品牌排行榜
    给yarn/npm包管理设置代理加速nodejs依赖下载的方法
    手把手教你区块链java开发智能合约nft-第一篇
    python set()去重的底层原理
    torch.manual_seed()解析
    Desthiobiotin衍生物Desthiobiotin-PEG4-Amine/Alkyne/Azide/DBCO
    模拟 Junit 框架
    基础 | 安全 - [加密]
    react中怎么为props设置默认值
  • 原文地址:https://blog.csdn.net/m0_46413639/article/details/126930416