Maven - Membangun Otomasi

Build Automation menentukan skenario di mana proses build project dependen dimulai setelah build project berhasil diselesaikan, untuk memastikan bahwa project dependen stabil.

Example

Pertimbangkan sebuah tim sedang mengembangkan proyek bus-core-api di mana dua proyek lainnya app-web-ui dan app-desktop-ui tergantung.

app-web-ui proyek menggunakan 1.0-SNAPSHOT dari bus-core-api proyek.

<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 proyek menggunakan 1.0-SNAPSHOT dari bus-core-api proyek.

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

bus-core-api proyek -

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

Sekarang, tim dari app-web-ui dan app-desktop-ui proyek mengharuskan proses pembuatannya dimulai kapan pun bus-core-api perubahan proyek.

Menggunakan snapshot, memastikan bahwa yang terbaru bus-core-api proyek harus digunakan tetapi untuk memenuhi persyaratan di atas kita perlu melakukan sesuatu yang ekstra.

Kami dapat melanjutkan dengan dua cara berikut -

  • Tambahkan tujuan pasca-bangun di bus-core-api pom untuk memulai app-web-ui dan app-desktop-ui membangun.

  • Gunakan Server Integrasi Berkelanjutan (CI) seperti Hudson untuk mengelola otomatisasi build secara otomatis.

Menggunakan Maven

Memperbarui bus-core-api proyek 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>

Mari buka konsol perintah, buka C:\ > MVN > bus-core-api direktori dan jalankan perintah berikut mvn perintah.

>mvn clean package -U

Maven akan mulai membangun proyek tersebut 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] ------------------------------------------------------------------

Sekali bus-core-api build berhasil, Maven akan mulai membangun app-web-ui proyek.

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

Sekali app-web-ui build berhasil, Maven akan mulai membangun app-desktop-ui proyek.

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

Menggunakan Layanan Integrasi Berkelanjutan dengan Maven

Menggunakan CI Server lebih disukai oleh pengembang. Tidak perlu memperbaruibus-core-api project, setiap kali project baru (misalnya, app-mobile-ui) ditambahkan, sebagai project dependen bus-core-apiproyek. Hudsion adalah alat integrasi berkelanjutan yang ditulis dalam java, yang berada dalam wadah servlet, seperti, Apache tomcat dan server aplikasi glassfish. Hudson secara otomatis mengelola otomatisasi build menggunakan manajemen ketergantungan Maven. Snapshot berikut akan menentukan peran alat Hudson.

Hudson menganggap setiap proyek yang dibangun sebagai pekerjaan. Setelah kode proyek di-check-in ke SVN (atau Alat Manajemen Sumber apa pun yang dipetakan ke Hudson), Hudson memulai pekerjaan pembuatannya dan setelah pekerjaan ini selesai, ia memulai pekerjaan lain yang bergantung (proyek bergantung lainnya) secara otomatis.

Dalam contoh di atas, kapan bus-core-uikode sumber diperbarui di SVN, Hudson memulai pembuatannya. Setelah build berhasil, Hudson mencari project dependen secara otomatis, dan mulai membangunapp-web-ui dan app-desktop-ui proyek.