Maven 自動化構建

JIAN2發表於2022-08-02

Maven 自動化構建

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

比如一個團隊正在開發一個專案 bus-core-api, 並且有其他兩個專案 app-web-ui 和 app-desktop-ui 依賴於這個專案。

app-web-ui 專案使用的是 bus-core-api 專案的 1.0 快照:

< project xmlns = " "   xmlns:xsi = " "   xsi:schemaLocation = "   " >   < 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 = " "   xmlns:xsi = " "   xsi:schemaLocation = "   " >   < 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 = " "   xmlns:xsi = " "   xsi:schemaLocation = "   " >   < modelVersion > 4.0.0 </ modelVersion >   < groupId > bus-core-api </ groupId >   < artifactId > bus-core-api </ artifactId >   < version > 1.0-SNAPSHOT </ version >   < packaging > jar </ packaging >   </ project >

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

< project xmlns = " "   xmlns:xsi = " "   xsi:schemaLocation = "   " >   < 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 目錄下,然後執行以下命令。

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 專案。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2908510/,如需轉載,請註明出處,否則將追究法律責任。

相關文章