Maven - Tự động hóa xây dựng

Tự động hóa xây dựng xác định kịch bản trong đó quá trình xây dựng (các) dự án phụ thuộc được bắt đầu sau khi quá trình xây dựng dự án được hoàn thành thành công, để đảm bảo (các) dự án phụ thuộc đó ổn định.

Example

Xem xét một nhóm đang phát triển một dự án bus-core-api trên đó hai dự án khác app-web-uiapp-desktop-ui đang phụ thuộc.

app-web-ui dự án đang sử dụng 1.0-SNAPSHOT của bus-core-api dự án.

<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 dự án đang sử dụng 1.0-SNAPSHOT của bus-core-api dự án.

<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 dự án -

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

Bây giờ, các đội của app-web-uiapp-desktop-ui các dự án yêu cầu quá trình xây dựng của họ phải bắt đầu bất cứ khi nào bus-core-api thay đổi dự án.

Sử dụng ảnh chụp nhanh, đảm bảo rằng bus-core-api dự án nên được sử dụng nhưng để đáp ứng yêu cầu trên, chúng ta cần phải làm gì đó bổ sung.

Chúng ta có thể tiến hành theo hai cách sau:

  • Thêm mục tiêu sau khi xây dựng trong bus-core-api pom để bắt đầu app-web-uiapp-desktop-ui xây dựng.

  • Sử dụng Máy chủ tích hợp liên tục (CI) như Hudson để quản lý tự động hóa quá trình xây dựng.

Sử dụng Maven

Cập nhật bus-core-api dự án 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>

Hãy mở bảng điều khiển lệnh, đi tới C:\ > MVN > bus-core-api thư mục và thực thi những điều sau mvn chỉ huy.

>mvn clean package -U

Maven sẽ bắt đầu xây dựng dự án 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] ------------------------------------------------------------------

Một lần bus-core-api xây dựng thành công, Maven sẽ bắt đầu xây dựng app-web-ui dự án.

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

Một lần app-web-ui xây dựng thành công, Maven sẽ bắt đầu xây dựng app-desktop-ui dự án.

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

Sử dụng Dịch vụ Tích hợp Liên tục với Maven

Các nhà phát triển thích sử dụng Máy chủ CI hơn. Không bắt buộc phải cập nhậtbus-core-api dự án, mỗi khi một dự án mới (ví dụ: app-mobile-ui) được thêm vào, vì dự án phụ thuộc vào bus-core-apidự án. Hudsion là một công cụ tích hợp liên tục được viết bằng java, trong một vùng chứa servlet, chẳng hạn như Apache tomcat và máy chủ ứng dụng glassfish. Hudson tự động quản lý tự động hóa xây dựng bằng cách sử dụng quản lý phụ thuộc Maven. Ảnh chụp nhanh sau đây sẽ xác định vai trò của công cụ Hudson.

Hudson coi mỗi dự án xây dựng là một công việc. Sau khi mã dự án được đăng ký vào SVN (hoặc bất kỳ Công cụ quản lý nguồn nào được ánh xạ tới Hudson), Hudson bắt đầu công việc xây dựng của nó và khi công việc này hoàn thành, nó sẽ tự động bắt đầu các công việc phụ thuộc khác (các dự án phụ thuộc khác).

Trong ví dụ trên, khi bus-core-uimã nguồn được cập nhật trong SVN, Hudson bắt đầu xây dựng. Sau khi xây dựng thành công, Hudson sẽ tự động tìm kiếm các dự án phụ thuộc và bắt đầu xây dựngapp-web-uiapp-desktop-ui các dự án.