Maven - Xây dựng vòng đời

Build Lifecycle là gì?

Vòng đời xây dựng là một chuỗi các giai đoạn được xác định rõ ràng, các giai đoạn này xác định thứ tự thực hiện các mục tiêu. Ở đây giai đoạn đại diện cho một giai đoạn trong vòng đời. Như một ví dụ, một điển hìnhMaven Build Lifecycle bao gồm trình tự các giai đoạn sau.

Giai đoạn Xử lý Sự miêu tả
chuẩn bị nguồn lực sao chép tài nguyên Việc sao chép tài nguyên có thể được tùy chỉnh trong giai đoạn này.
xác nhận Xác thực thông tin Xác thực nếu dự án là chính xác và nếu tất cả các thông tin cần thiết có sẵn.
biên dịch biên soạn Việc biên dịch mã nguồn được thực hiện trong giai đoạn này.
Kiểm tra Thử nghiệm Kiểm tra mã nguồn đã biên dịch phù hợp với khung kiểm thử.
gói hàng bao bì Giai đoạn này tạo gói JAR / WAR như được đề cập trong bao bì trong POM.xml.
Tải về cài đặt Giai đoạn này cài đặt gói trong kho lưu trữ maven cục bộ / từ xa.
Triển khai Triển khai Sao chép gói cuối cùng vào kho lưu trữ từ xa.

Luôn luôn có prepost giai đoạn đăng ký goals, phải chạy trước hoặc sau một giai đoạn cụ thể.

Khi Maven bắt đầu xây dựng một dự án, nó sẽ bước qua một chuỗi các giai đoạn xác định và thực hiện các mục tiêu, được đăng ký với từng giai đoạn.

Maven có ba vòng đời tiêu chuẩn sau:

  • clean
  • mặc định (hoặc xây dựng)
  • site

A goalđại diện cho một nhiệm vụ cụ thể góp phần xây dựng và quản lý một dự án. Nó có thể bị ràng buộc với 0 hoặc nhiều giai đoạn xây dựng. Một mục tiêu không bị ràng buộc với bất kỳ giai đoạn xây dựng nào có thể được thực thi bên ngoài vòng đời xây dựng bằng cách gọi trực tiếp.

Thứ tự thực hiện phụ thuộc vào thứ tự mà (các) mục tiêu và (các) giai đoạn xây dựng được gọi. Ví dụ, hãy xem xét lệnh dưới đây. Cáccleanpackage các đối số là các giai đoạn xây dựng trong khi dependency:copy-dependencies là một mục tiêu.

mvn clean dependency:copy-dependencies package

Ở đây giai đoạn sạch sẽ được thực hiện đầu tiên, tiếp theo làdependency:copy-dependencies goal, và cuối cùng giai đoạn gói sẽ được thực hiện.

Vòng đời sạch

Khi chúng ta thực hiện lệnh post-clean mvn , Maven gọi vòng đời sạch bao gồm các giai đoạn sau.

  • pre-clean
  • clean
  • post-clean

Mục tiêu sạch của Maven (sạch: sạch sẽ) được ràng buộc với giai đoạn sạch trong vòng đời sạch. Nó làclean:cleangoalxóa đầu ra của một bản dựng bằng cách xóa thư mục bản dựng. Do đó, khi lệnh mvn clean thực thi, Maven sẽ xóa thư mục xây dựng.

Chúng tôi có thể tùy chỉnh hành vi này bằng cách đề cập đến các mục tiêu trong bất kỳ giai đoạn nào ở trên của vòng đời sạch.

Trong ví dụ sau, Chúng tôi sẽ đính kèm maven-antrun-plugin: run target vào các giai đoạn trước, sạch và sau sạch. Điều này sẽ cho phép chúng tôi lặp lại các tin nhắn văn bản hiển thị các giai đoạn của vòng đời sạch.

Chúng tôi đã tạo một pom.xml trong thư mục C: \ MVN \ project.

<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>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <id>id.pre-clean</id>
                  <phase>pre-clean</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>pre-clean phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.clean</id>
                  <phase>clean</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>clean phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.post-clean</id>
                  <phase>post-clean</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>post-clean phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>
</project>

Bây giờ mở bảng điều khiển lệnh, đi đến thư mục chứa pom.xml và thực hiện như sau mvn chỉ huy.

C:\MVN\project>mvn post-clean

Maven sẽ bắt đầu xử lý và hiển thị tất cả các giai đoạn của vòng đời sạch.

[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: > 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------

Bạn có thể thử điều chỉnh mvn clean lệnh sẽ hiển thị pre-cleanvà sạch sẽ. Không có gì sẽ được thực hiện chopost-clean giai đoạn.

Vòng đời mặc định (hoặc xây dựng)

Đây là vòng đời chính của Maven và được sử dụng để xây dựng ứng dụng. Nó có 21 giai đoạn sau.

Sr.No. Giai đoạn vòng đời & Mô tả
1

validate

Xác nhận xem dự án có đúng hay không và tất cả các thông tin cần thiết đều có sẵn để hoàn tất quá trình xây dựng.

2

initialize

Khởi tạo trạng thái xây dựng, ví dụ thiết lập thuộc tính.

3

generate-sources

Tạo bất kỳ mã nguồn nào được đưa vào giai đoạn biên dịch.

4

process-sources

Xử lý mã nguồn, ví dụ, lọc bất kỳ giá trị nào.

5

generate-resources

Tạo tài nguyên được bao gồm trong gói.

6

process-resources

Sao chép và xử lý các tài nguyên vào thư mục đích, sẵn sàng cho giai đoạn đóng gói.

7

compile

Biên dịch mã nguồn của dự án.

số 8

process-classes

Xử lý hậu kỳ các tệp được tạo từ quá trình biên dịch, chẳng hạn như để thực hiện nâng cao / tối ưu hóa bytecode trên các lớp Java.

9

generate-test-sources

Tạo bất kỳ mã nguồn thử nghiệm nào được đưa vào giai đoạn biên dịch.

10

process-test-sources

Xử lý mã nguồn thử nghiệm, chẳng hạn như lọc bất kỳ giá trị nào.

11

test-compile

Biên dịch mã nguồn thử nghiệm vào thư mục đích thử nghiệm.

12

process-test-classes

Xử lý các tệp được tạo từ quá trình biên dịch tệp mã thử nghiệm.

13

test

Chạy thử nghiệm bằng cách sử dụng khung thử nghiệm đơn vị phù hợp (Junit là một).

14

prepare-package

Thực hiện bất kỳ thao tác nào cần thiết để chuẩn bị một gói hàng trước khi đóng gói thực tế.

15

package

Lấy mã đã biên dịch và đóng gói nó ở định dạng có thể phân phối, chẳng hạn như tệp JAR, WAR hoặc EAR.

16

pre-integration-test

Thực hiện các hành động cần thiết trước khi thực thi các kiểm tra tích hợp. Ví dụ, thiết lập môi trường yêu cầu.

17

integration-test

Xử lý và triển khai gói nếu cần thiết vào một môi trường có thể chạy các thử nghiệm tích hợp.

18

post-integration-test

Thực hiện các hành động cần thiết sau khi kiểm tra tích hợp đã được thực hiện. Ví dụ, làm sạch môi trường.

19

verify

Chạy bất kỳ lần kiểm tra nào để xác minh gói hàng hợp lệ và đáp ứng tiêu chí chất lượng.

20

install

Cài đặt gói vào kho lưu trữ cục bộ, có thể được sử dụng như một phần phụ thuộc trong các dự án cục bộ khác.

21

deploy

Sao chép gói cuối cùng vào kho lưu trữ từ xa để chia sẻ với các nhà phát triển và dự án khác.

Có một số khái niệm quan trọng liên quan đến Maven Lifecycles, đáng được đề cập đến -

  • Ví dụ: khi một pha được gọi thông qua lệnh Maven mvn compile, chỉ các giai đoạn lên đến và bao gồm giai đoạn đó sẽ thực thi.

  • Các mục tiêu maven khác nhau sẽ bị ràng buộc với các giai đoạn khác nhau của vòng đời Maven tùy thuộc vào loại bao bì (JAR / WAR / EAR).

Trong ví dụ sau, chúng tôi sẽ đính kèm maven-antrun-plugin: run target vào một vài giai đoạn của vòng đời Xây dựng. Điều này sẽ cho phép chúng tôi lặp lại các tin nhắn văn bản hiển thị các giai đoạn của vòng đời.

Chúng tôi đã cập nhật pom.xml trong thư mục C: \ MVN \ project.

<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>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <id>id.validate</id>
                  <phase>validate</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>validate phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.compile</id>
                  <phase>compile</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>compile phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.test</id>
                  <phase>test</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>test phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.package</id>
                  <phase>package</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>package phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.deploy</id>
                  <phase>deploy</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>deploy phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>
</project>

Bây giờ hãy mở bảng điều khiển lệnh, truy cập thư mục chứa pom.xml và thực hiện như sau mvn chỉ huy.

C:\MVN\project>mvn compile

Maven sẽ bắt đầu xử lý và hiển thị các giai đoạn của vòng đời xây dựng cho đến giai đoạn biên dịch.

[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [compile]
[INFO] -----------------------------------------------------------------
-
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
[echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered
resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] -----------------------------------------------------------------
-
[INFO] BUILD SUCCESSFUL
[INFO] -----------------------------------------------------------------
-
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] -----------------------------------------------------------------
-

Vòng đời của trang web

Plugin Maven Site thường được sử dụng để tạo tài liệu mới để tạo báo cáo, triển khai trang web, v.v. Nó có các giai đoạn sau:

  • pre-site
  • site
  • post-site
  • site-deploy

Trong ví dụ sau, chúng tôi sẽ đính kèm maven-antrun-plugin:runmục tiêu cho tất cả các giai đoạn của vòng đời Trang web. Điều này sẽ cho phép chúng tôi lặp lại các tin nhắn văn bản hiển thị các giai đoạn của vòng đời.

Chúng tôi đã cập nhật pom.xml trong thư mục C: \ MVN \ project.

<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>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <id>id.pre-site</id>
                  <phase>pre-site</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>pre-site phase</echo>
                     </tasks>
                  </configuration>
               </execution>
               
               <execution>
                  <id>id.site</id>
                  <phase>site</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>site phase</echo>
                     </tasks>
                  </configuration>
               </execution>
               
               <execution>
                  <id>id.post-site</id>
                  <phase>post-site</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>post-site phase</echo>
                     </tasks>
                  </configuration>
               </execution>
               
               <execution>
                  <id>id.site-deploy</id>
                  <phase>site-deploy</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>site-deploy phase</echo>
                     </tasks>
                  </configuration>
               </execution>
               
            </executions>
         </plugin>
      </plugins>
   </build>
</project>

Bây giờ mở bảng điều khiển lệnh, truy cập thư mục chứa pom.xml và thực hiện như sau mvn chỉ huy.

C:\MVN\project>mvn site

Maven sẽ bắt đầu xử lý và hiển thị các giai đoạn của vòng đời trang web cho đến giai đoạn trang web.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
[echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]

[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.

[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
[echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------