Maven 快照及構建自動化
快照的作用
一個團隊工作負責應用程序的前端應用用戶接口工程(app-ui.jar:1.0)),同時他們使用數據服務工程(data-service.jar:1.0)。
現在負責數據服務的團隊可能正在進行修正 bug 或者增強功能,並快速叠代,然後他們幾乎每天都會 release 工程庫文件到遠程倉庫中。
現在如果數據服務團隊每天上傳新的版本,那麽就會有下面的問題:
- 每次數據服務團隊發布了一版更新的代碼時,都要告訴應用接口團隊。
- 應用接口團隊需要定期更新他們的 pom.xml 來得到更新的版本。
快照是一個特殊的版本,它表示當前開發的一個副本。與常規版本不同,Maven 為每一次構建從遠程倉庫中檢出一份新的快照版本。現在數據服務團隊會將每次更新的代碼的快照(例如 data-service:1.0-SNAPSHOT)發布到倉庫中,來替換舊的快照 jar 文件。對於快照,每次用戶接口團隊構建他們的項目時,Maven 將自動獲取最新的快照(data-service:1.0-SNAPSHOT)。
構建自動化
快照能保證數據服務是最新的,但是接口工程不能隨時被自動構建,有兩種方式解決:
1、在接口工程的 pom 文件裏添加一個編譯目標來提醒其構建。
2、使用一個持續集成(CI)的服務器,比如 Hudson或者是Jenkins,來實現自動化創建。
更新數據服務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> <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>
執行mvn命令
C:\MVN\bus-core-api>mvn clean package -U
使用Hudson或者是Jenkins
Hudson 把每次創建工程看做一個工作。一旦工程代碼合入到 svn 或者其他任何的映射到Hudson上的代碼源管理工具上,Hudson 便開始一次的創建工作,等到該工作完成後,它將會自動創建其他相關的依賴工作或者依賴工程。
在上面的例子中,當 bus-core-api 的源代碼在 SVN 上有更新時, Hudson 將會啟動創建。當創建完成後,Hudson 開始自動尋找其依賴的工程,然後啟動 app-web-ui 和 app-desktop-ui 工程。
Maven 快照及構建自動化