構建自動化定義相關工程專案構建過程中,在當專案構建成功完成啟動的情況下,來確保所依賴的專案是穩定的。
考慮一個團隊正在開發一個專案匯流排核心API上的其他兩個專案的應用程式:網頁UI和應用程式的桌面UI的依賴。
app-web-ui 專案使用1.0-SNAPSHOT匯流排核心API專案
<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> <name>app_web_ui</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>bus_core_api</groupId> <artifactId>bus_core_api</artifactId> <version>1.0-SNAPSHOT</version> <scope>system</scope> <systemPath>C:\MVN\bus_core_api\target\bus_core_api-1.0-SNAPSHOT.jar</systemPath> </dependency> </dependencies> </project>
app-desktop-ui 專案使用匯流排核心API專案 1.0-SNAPSHOT
<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 專案
<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>
現在,每當bus-core-api專案的變化時,app-web-ui和app-desktop-ui專案團隊需要自己編譯過程。
使用快照確保可以使用最新的 bus-core-api 專案,但要滿足上面我們需要做一些額外的要求。
新增一個生成後的目標 bus-core-api POM的應用程式是在 app-web-ui 和 app-desktop-ui 的基礎之上。
使用持續整合(CI)的伺服器自動管理構建自動化。
更新匯流排核心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目錄,然後執行以下命令mvn命令。
C:/MVN/us-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:MVNus-core-ui arget 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:MVNapp-web-ui arget 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 arget app-desktop-ui-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------- [INFO] BUILD SUCCESSFUL [INFO] -------------------------------------------------------------------
使用CI伺服器更適合作為開發人員,每次建立一個新的專案不需要更新 bus-core-api 專案的 POM,例如 app-mobile-ui 新增作為 bus-core-api 專案相關的專案。Hudson 自動管理使用 Maven 依賴管理構建自動化。
Hudson 認每個專案生成的工作。一旦一個專案的程式碼簽入到SVN(或對映到哈德森任何源管理工具),哈德森開始它的構建工作,一旦這項工作得到完成,它會自動啟動其他相關工作(其他相關專案)。
在上面的例子中,當bus-core-ui 原始碼SVN更新,Hudson 開始它的構建。當構建成功,Hudson 自動查詢相關的專案,並開始構建 app-web-ui 和app-desktop-ui 專案。