自動化構(gòu)建定義了這樣一種場景: 在一個項目成功構(gòu)建完成后,其相關(guān)的依賴工程即開始構(gòu)建,這樣可以保證其依賴項目的穩(wěn)定。
比如一個團(tuán)隊正在開發(fā)一個項目 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 快照:
<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>
現(xiàn)在 app-web-ui 和 app-desktop-ui 項目的團(tuán)隊要求不管 bus-core-api 項目何時變化,他們的構(gòu)建過程都應(yīng)當(dāng)可以啟動。
使用快照可以確保最新的 bus-core-api 項目被使用,但要達(dá)到上面的要求,我們還需要做一些額外的工作。
可以使用兩種方式:
在 bus-core-api 項目的 pom 文件中添加一個 post-build 目標(biāo)操作來啟動 app-web-ui 和 app-desktop-ui 項目的構(gòu)建。
使用持續(xù)集成(CI) 服務(wù)器,比如 Hudson,來自行管理構(gòu)建自動化。
修改 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í)行以下命令。
C:\MVN\bus-core-api>mvn clean package -U
執(zhí)行完命令后,Maven 將開始構(gòu)建項目 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 構(gòu)建成功后,Maven 將開始構(gòu)建 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 構(gòu)建成功后,Maven 將開始構(gòu)建 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 服務(wù)器更,我們每次的一個新項目,比如說示例中的 app-mobile-ui,添加為依賴 bus-core-api 項目時,開發(fā)者就不需要更新 bus-core-api 項目的 pom。Hudson 將會借助 Maven 的依賴管理功能實現(xiàn)工程的自動化創(chuàng)建。
Hudson 把每個項目構(gòu)建當(dāng)成一次任務(wù)。在一個項目的代碼提交到 SVN (或者任何映射到 Hudson 的代碼管理工具)后,Hudson 將開始項目的構(gòu)建任務(wù),并且一旦此構(gòu)建任務(wù)完成,Hudson 將自動啟動其他依賴的構(gòu)建任務(wù)(其他依賴項目的構(gòu)建)。
在上面的實例中,當(dāng) bus-core-ui 源代碼在 SVN 更新后,Hudson 開始項目構(gòu)建。一旦構(gòu)建成功,Hudson 自動地查找依賴的項目,然后開始構(gòu)建 app-web-ui 和 app-desktop-ui 項目。