Tags:

Maven Goal và Phase là gì?

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về Maven Build Lifecycle và các phase của nó. Ngoài ra chúng ta cũng cùng nhau phân tích mối quan hệ giữa Goal và Phase trong Maven.

Maven Build LifeCycle

LifeCycle của Maven tuân thủ theo một nguyên tắc cụ thể để triển khai và phân phố dự án hiện hành. Có 3 vòng đời được xây dựng sẵn trong Maven.

  • default: Đây là lifecycle chính chịu trách nhiệm cho việc triển khai dự án.
  • clean: Xoá tất cả những gì được snh ra từ những lần build trước.
  • site: Khởi tạo project document.

Mỗi lifecycle trên chứa một chuỗi các phase cụ thể. Ví dụ default build lifecycle chứa 23 phase, clean chứa 3 phase và site chứa 4 phase.

Maven Phase

Một Maven Phase đại diện cho một giai đoạn cụ thể trong Maven Build Lifecycle. Mỗi phase chịu trách nhiệm cho một công việc cụ thể. Dưới đây là một số phase quan trọng trong default build lifecycle.

  • validate: Kiểm tra tất cả các thông tin cần thiết trước khi buid
  • compile: Biên dịch mã nguồn
  • test-compile: Biên dịch mã nguồn test
  • test: Thực thi unit test
  • package: Đóng gói mã nguồn đã biên dịch sang một dạng jar, war dùng để phân phối đến các máy khác.
  • integration-test: Xử lý triển khai các package cần thiết để chạy intergration test.
  • install:  Tải package(được đóng gói bởi package phase) xuống local repository
  • deploy: Sao chép package đến remote repository

Các bạn có thể tham khảo danh sách đầy đủ các phase trong Maven tại đây.

Các phase được thực hiện theo một thứ tự cụ thể. Điều này có nghĩa là nếu chúng ta chạy một phase cụ thể bằng lệnh:

mvn <PHASE>

Maven sẽ không chỉ thực thi phase được chỉ định mà nó còn thực thi tất cả các phase trước nó. Ví dụ nếu chúng ta thực thi deploy phase đây là phase cuối cùng trong default build lifecycle thì có nghĩa là tất cả các phase trong đó sẽ được thực thi bao gồm validate, compile, package, v.v

Maven Goal

Mỗi Phase chứa một danh sách các goal sắp sếp theo thứ tự, mỗi goal sẽ chịu trách nhiệm cho một nhiệm vụ cụ thể. Khi chúng ta thực thi một phase thì tất cả các goal của nó sẽ thực thi theo thứ tự định sẵn.

Dưới đây là một số goal của một số phase quan trọng:

  • compiler:compile – compile goal từ compiler plugin được ràng buộc với compile phase.
  • compiler: testCompile được ràng buộc với the test-compile phase
  • surefire:test được ràng buộc vớitest phase
  • install:install được ràng buộc vớiinstall phase
  • jar:jar và war:war được ràng buộc với package phase

Chúng ta có thể liệt kê tất cả các goal của một phase cụ thể cùng với những plugin của nó với lệnh CMD sau:

mvn help:describe -Dcmd=PHASENAME

Ví dụ chúng ta có thể xem tất cả các goal của compile phase như sau:

mvn help:describe -Dcmd=compile

Và output

compile' is a phase corresponding to this plugin:
org.apache.maven.plugins:maven-compiler-plugin:3.1:compile

Như đã đề cập ở trên, có nghĩa là compile goal từ compiler plugin bị ràng buộc với compile phase.

Maven plugin

Maven plugin là một nhóm các goal. Tuy nhiên những goal này không nhất thiết phải có trong cùng một phase.

Ví dụ: đây là cấu hình đơn giản của plugin Maven Failsafe chịu trách nhiệm chạy các integration test.

<build>
    <plugins>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${maven.failsafe.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Như chúng ta có thể thấy, plugin Failsafe có hai goal chính được định cấu hình ở đây:

  • integration-test:  Chạy integration test
  • verify:  Xác minh kết quả

Chúng ta có thể liệt kê danh sách tất cả các goal của một plugin bằng cách:

mvn <PLUGIN>:help

Ví dụ liệt kê các goal của Failsafe plugin

mvn failsafe:help

Output

This plugin has 3 goals:

failsafe:help
  Display help information on maven-failsafe-plugin.
  Call mvn failsafe:help -Ddetail=true -Dgoal=<goal-name> to display parameter
  details.

failsafe:integration-test
  Run integration tests using Surefire.

failsafe:verify
  Verify integration tests ran using Surefire.

Để chạy một goal cụ thể mà không cần thực hiện toàn bộ goal của nó chúng ta có thể sử dụng lệnh:

mvn <PLUGIN>:<GOAL>

Ví dụ: để chạy integration-test goal từ plugin Failsafe, chúng ta cần chạy:

mvn failsafe:integration-test

Build Maven Project

Để build một maven project chúng ta cần thực thi một trong các lifecycle bằng cách chạy một trong số các phase của chúng.

mvn deploy

Lệnh trên sẽ thực thi default lifecycle, ngoài ra chúng ta có thể dừng lại ở install phase.

mvn install

Nhưng thông thường chúng ta sẽ sử dụng lệnh 

mvn clean install

Để làm sạch project trước bằng cách chạy clean lifecycle sau đó mới build. Chúng ta cũng có thể chạy một goal cụ thể bằng cách.

mvn compiler:compile

Compile phase thường được dùng khi chúng ta đang develop trên IDE và chưa muốn build ra file jar để deploy hay với mục đích phân phối ứng dụng.

Tóm lược

Qua bài viết chúng ta sẽ tìm hiểu về các maven build lifecycle và mối quan hệ giữa phase và goal. Hy vọng các bạn có thể nắm được kiến thức này để sử dụng maven có chủ đích hơn nhé.

Nguồn tham khảo

https://www.baeldung.com/maven-goals-phases

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x