Apache Maven 構建自動化

2022-08-30 16:57 更新

構建自動化定義為一種場景:一旦該工程成功構建完成,其相關的依賴工程即開始構建,目的是為了保證其依賴項目的穩(wěn)定。


實例

考慮一個團隊正在開發(fā)一個關于總線核心 Api(稱其為 bus-core-api)的工程,依賴它的工程有 2 個,分別為網頁 UI(稱其為 app-web-ui)和應用程序桌面 UI(稱其為 app-desktop-ui)。

app-web-ui 工程使用 1.0-SNAPSHOT 總線核心 Api 工程,其 POM 文件如下:

<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>app-web-ui</groupId>
   <artifactId>app-web-ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <dependencies>
      <dependency>
      <groupId>bus-core-api</groupId>
         <artifactId>bus-core-api</artifactId>
         <version>1.0-SNAPSHOT</version>
      </dependency>
   </dependencies>
</project>

app-desktop-ui 工程也正在使用 1.0-SNAPSHOT 總線核心 Api 工程,其 POM 文件如下:

<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>app-desktop-ui</groupId>
   <artifactId>app-desktop-ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <dependencies>
      <dependency>
      <groupId>bus-core-api</groupId>
         <artifactId>bus-core-api</artifactId>
         <version>1.0-SNAPSHOT</version>
      </dependency>
   </dependencies>
</project>

bus-core-api 工程的 POM 文件如下:

<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>bus-core-api</groupId>
   <artifactId>bus-core-api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>   
</project>

現(xiàn)在,app-web-ui 和 app-desktop-ui 工程的團隊需要保證當 bus-core-api 工程有變化時他們自己相應的工程可以隨時被構建。

使用快照可以保證最新的 bus-core-api 工程可以被使用,但是為了達到上述的需求,我們仍需做一些額外的工作。

我們有 2 種方式:

  • 在 bus-core-api 的 pom 文件里添加一個編譯目標來提醒 app-web-ui 工程和 app-desktop-ui 工程啟動創(chuàng)建。
  • 使用一個持續(xù)集成(CI)的服務器,比如 Hudson,來實現(xiàn)自動化創(chuàng)建。

使用 Maven

更新 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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>bus-core-api</groupId>
   <artifactId>bus-core-api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   <build>
   <plugins>
   <plugin>
   <artifactId>maven-invoker-plugin</artifactId>
   <version>1.6</version>
      <configuration>
         <debug>true</debug>
         <pomIncludes>
            <pomInclude>app-web-ui/pom.xml</pomInclude>
            <pomInclude>app-desktop-ui/pom.xml</pomInclude> 
         </pomIncludes>
      </configuration>
      <executions>
         <execution>
            <id>build</id>
            <goals>
               <goal>run</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
   </plugins>
   <build>
</project>

打開命令終端,進入到 C:\ > MVN > bus-core-api 的目錄下,然后執(zhí)行如下的 mvn 的命令。

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

Maven 將會開始構建 bus-core-api 工程,輸出日志如下:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building bus-core-api
[INFO]    task-segment: [clean, package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\bus-core-ui\target\
bus-core-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------

一旦 bus-core-api 構建成功,Maven 將會自動開始構建 app-web-ui 項目, 日志如下:

[INFO] ------------------------------------------------------------------
[INFO] Building app-web-ui 
[INFO]    task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-web-ui\target\
app-web-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------

等到 app-web-ui 創(chuàng)建成功,Maven 接著開始構建 app-desktop-ui 工程,日志輸出如下:

[INFO] ------------------------------------------------------------------
[INFO] Building app-desktop-ui 
[INFO]    task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-desktop-ui\target\
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------

使用持續(xù)集成服務器(CI)

由于開發(fā)人員不需要每次多一個新的依賴工程時都去更新 bus-core-api 工程的 pom 文件, 因此使用一個持續(xù)集成的服務器更加合適,例如,添加一個新的 app-mobile-ui 的工程,它同樣依賴于 bus-core-ui 工程。Hudson 將會借助 Maven 的依賴管理功能實現(xiàn)工程的自動化創(chuàng)建。

automated build

Hunson 把每次創(chuàng)建工程看做一個工作。一旦工程代碼合入到 svn 或者其他任何的映射到Hudson上的代碼源管理工具上,Hunson 便開始一次的創(chuàng)建工作,等到該工作完成后,它將會自動創(chuàng)建其他相關的依賴工作或者依賴工程。

在上面的例子中,當 bus-core-api 的源代碼在 SVN 上有更新時, Hudson 將會啟動創(chuàng)建。當創(chuàng)建完成后,Hudson 開始自動尋找其依賴的工程,然后啟動 app-web-ui 和 app-desktop-ui 工程。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號