Maven - POM
POM là viết tắt của Project Object Model. Nó là đơn vị cơ bản của công việc ở Maven. Nó là một tệp XML nằm trong thư mục cơ sở của dự án dưới dạng pom.xml.
POM chứa thông tin về dự án và các chi tiết cấu hình khác nhau được Maven sử dụng để xây dựng (các) dự án.
POM cũng chứa các mục tiêu và plugin. Trong khi thực hiện một nhiệm vụ hoặc mục tiêu, Maven tìm kiếm POM trong thư mục hiện tại. Nó đọc POM, lấy thông tin cấu hình cần thiết và sau đó thực hiện mục tiêu. Một số cấu hình có thể được chỉ định trong POM như sau:
- phụ thuộc dự án
- plugins
- goals
- xây dựng hồ sơ
- phiên bản dự án
- developers
- danh sách gửi thư
Trước khi tạo POM, trước tiên chúng ta nên quyết định dự án group (groupId), của nó name (ArtifactId) và phiên bản của nó vì các thuộc tính này giúp xác định duy nhất dự án trong kho lưu trữ.
Ví dụ POM
<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.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
</project>
Cần lưu ý rằng nên có một tệp POM duy nhất cho mỗi dự án.
Tất cả các tệp POM yêu cầu project phần tử và ba trường bắt buộc: groupId, artifactId, version.
Ký hiệu dự án trong kho lưu trữ là groupId:artifactId:version.
Yêu cầu tối thiểu đối với POM -
Sr.No. | Nút & Mô tả |
---|---|
1 | Project root Đây là thẻ gốc của dự án. Bạn cần chỉ định các cài đặt lược đồ cơ bản như lược đồ apache và đặc tả w3.org. |
2 | Model version Phiên bản mô hình phải là 4.0.0. |
3 | groupId Đây là Id của nhóm dự án. Điều này thường là duy nhất giữa một tổ chức hoặc một dự án. Ví dụ: một nhóm ngân hàng com.company.bank có tất cả các dự án liên quan đến ngân hàng. |
4 | artifactId Đây là một Id của dự án. Đây thường là tên của dự án. Ví dụ, ngân hàng tiêu dùng. Cùng với groupId, tạo tác xác định vị trí của tạo tác trong kho lưu trữ. |
5 | version Đây là phiên bản của dự án. Cùng với groupId, Nó được sử dụng trong kho lưu trữ của một tạo tác để tách các phiên bản khỏi nhau. Ví dụ - com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1. |
Super POM
Super POM là POM mặc định của Maven. Tất cả các POM kế thừa từ cha mẹ hoặc mặc định (mặc dù được xác định rõ ràng hay không). POM cơ sở này được gọi làSuper POMvà chứa các giá trị được kế thừa theo mặc định.
Maven sử dụng POM hiệu quả (cấu hình từ super pom cộng với cấu hình dự án) để thực hiện mục tiêu liên quan. Nó giúp các nhà phát triển chỉ định chi tiết cấu hình tối thiểu trong pom.xml của họ. Mặc dù các cấu hình có thể được ghi đè dễ dàng.
Một cách dễ dàng để xem các cấu hình mặc định của super POM là chạy lệnh sau: mvn help:effective-pom
Tạo một pom.xml trong bất kỳ thư mục nào trên máy tính của bạn. Sử dụng nội dung của pom ví dụ đã đề cập ở trên.
Trong ví dụ dưới đây, Chúng tôi đã tạo một pom.xml trong thư mục C: \ MVN \ 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 help:effective-pom
Maven sẽ bắt đầu xử lý và hiển thị hiệu quả.
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO] task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]
.....
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
POM hiệu quả được hiển thị trong bảng điều khiển, sau khi áp dụng kế thừa, nội suy và cấu hình.
<?xml version="1.0" encoding="UTF-8"?>
<!-- ============================================== -->
<!-- -->
<!-- Generated by Maven Help Plugin on 2015-04-09T11:41:51 -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
<!-- -->
<!-- ==============================================-->
<!-- ==============================================-->
<!-- -->
<!-- Effective POM for project -->
<!-- 'com.companyname.project-group:project-name:jar:1.0' -->
<!-- -->
<!-- ============================================== -->
<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.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
<outputDirectory>C:\MVN\project\target\classes</outputDirectory>
<testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
<resources>
<resource>
<mergeId>resource-0</mergeId>
<directory>C:\MVN\project\src\main\resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<mergeId>resource-1</mergeId>
<directory>C:\MVN\project\src\test\resources</directory>
</testResource>
</testResources>
<directory>C:\MVN\project\target</directory>
<finalName>project-1.0</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin< /artifactId>
<version>2.2-beta-2</version>
</plugin>
<plugin>
<artifactId>maven-clean-plugin< /artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.4</version>
</plugin>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.3.1</version>
</plugin>
<plugin>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-rar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-8</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.0-beta-7</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.0.4</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-2</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-help-plugin</artifactId>
<version>2.1.1</version>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
</pluginRepository>
</pluginRepositories>
<reporting>
<outputDirectory>C:\MVN\project\target/site</outputDirectory>
</reporting>
</project>
Trong pom.xml ở trên, bạn có thể thấy cấu trúc thư mục nguồn dự án mặc định, thư mục đầu ra, trình cắm thêm cần thiết, kho lưu trữ, thư mục báo cáo mà Maven sẽ sử dụng trong khi thực hiện các mục tiêu mong muốn.
Maven pom.xml cũng không bắt buộc phải viết thủ công. Maven cung cấp nhiều plugin archetype để tạo dự án, theo thứ tự, tạo cấu trúc dự án và pom.xml