天天看點

Maven 自動化建構

自動化建構定義了這樣一種場景: 在一個項目成功建構完成後,其相關的依賴工程即開始建構,這樣可以保證其依賴項目的穩定。

比如一個團隊正在開發一個項目 bus-core-api, 并且有其他兩個項目 app-web-ui 和 app-desktop-ui 依賴于這個項目。

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

<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 項目使用的是 bus-core-api 項目的 1.0 快照:

<groupId>app-desktop-ui</groupId>

<artifactId>app-desktop-ui</artifactId>

bus-core-api 項目:

<groupId>bus-core-api</groupId>

<artifactId>bus-core-api</artifactId>

<version>1.0-SNAPSHOT</version>

<packaging>jar</packaging>

現在 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 檔案。

<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>

打開指令控制台,切換到 C:\ > MVN > bus-core-api 目錄下,然後執行以下指令。

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 建構成功後,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] -------------------------------------------------------------------      

使用持續內建伺服器(CI)

如果使用 CI 伺服器更,我們每次的一個新項目,比如說執行個體中的 app-mobile-ui,添加為依賴 bus-core-api 項目時,開發者就不需要更新 bus-core-api 項目的 pom。Hudson 将會借助 Maven 的依賴管理功能實作工程的自動化建立。

Maven 自動化建構

Hudson 把每個項目建構當成一次任務。在一個項目的代碼送出到 SVN (或者任何映射到 Hudson 的代碼管理工具)後,Hudson 将開始項目的建構任務,并且一旦此建構任務完成,Hudson 将自動啟動其他依賴的建構任務(其他依賴項目的建構)。

在上面的例子中,當 bus-core-ui 源代碼在 SVN 更新後,Hudson 開始項目建構。一旦建構成功,Hudson 自動地查找依賴的項目,然後開始建構 app-web-ui 和 app-desktop-ui 項目。