Maven - POM
POM ย่อมาจาก Project Object Model เป็นหน่วยงานพื้นฐานใน Maven เป็นไฟล์ XML ที่อยู่ในไดเร็กทอรีฐานของโปรเจ็กต์เป็น pom.xml
POM มีข้อมูลเกี่ยวกับโครงการและรายละเอียดการกำหนดค่าต่างๆที่ Maven ใช้ในการสร้างโครงการ
POM ยังมีเป้าหมายและปลั๊กอิน ขณะดำเนินการงานหรือเป้าหมาย Maven จะมองหา POM ในไดเร็กทอรีปัจจุบัน มันอ่าน POM รับข้อมูลการกำหนดค่าที่จำเป็นจากนั้นดำเนินการตามเป้าหมาย การกำหนดค่าบางส่วนที่สามารถระบุได้ใน POM มีดังต่อไปนี้ -
- การอ้างอิงโครงการ
- plugins
- goals
- สร้างโปรไฟล์
- รุ่นโครงการ
- developers
- รายชื่อผู้รับจดหมาย
ก่อนสร้าง POM เราควรตัดสินใจโครงการก่อน group (groupId) ของมัน name (artifactId) และเวอร์ชันเนื่องจากแอ็ตทริบิวต์เหล่านี้ช่วยในการระบุโปรเจ็กต์แบบไม่ซ้ำใครในที่เก็บ
ตัวอย่าง 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>
ควรสังเกตว่าควรมีไฟล์ POM ไฟล์เดียวสำหรับแต่ละโครงการ
ไฟล์ POM ทั้งหมดต้องการไฟล์ project องค์ประกอบและสามฟิลด์บังคับ: groupId, artifactId, version.
สัญกรณ์โครงการในที่เก็บคือ groupId:artifactId:version.
ข้อกำหนดขั้นต่ำสำหรับ POM -
ซีเนียร์ | โหนดและคำอธิบาย |
---|---|
1 | Project root นี่คือแท็กรากของโครงการ คุณต้องระบุการตั้งค่าสคีมาพื้นฐานเช่นสคีมา apache และข้อกำหนด w3.org |
2 | Model version รุ่นควรเป็น 4.0.0 |
3 | groupId นี่คือรหัสของกลุ่มโครงการ โดยทั่วไปแล้วสิ่งนี้จะไม่ซ้ำกันระหว่างองค์กรหรือโครงการ ตัวอย่างเช่นกลุ่มธนาคาร com.company.bank มีโครงการที่เกี่ยวข้องกับธนาคารทั้งหมด |
4 | artifactId นี่คือ Id ของโครงการ โดยทั่วไปเป็นชื่อของโครงการ ตัวอย่างเช่นการธนาคารเพื่อผู้บริโภค นอกจาก groupId แล้ว artifactId ยังกำหนดตำแหน่งของอาร์ติแฟกต์ภายในที่เก็บ |
5 | version นี่คือเวอร์ชันของโครงการ นอกจาก groupId แล้วจะใช้ภายในที่เก็บของอาร์ติแฟกต์เพื่อแยกเวอร์ชันออกจากกัน ตัวอย่างเช่น - com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1. |
ซุปเปอร์ปอม
Super POM คือ POM เริ่มต้นของ Maven POM ทั้งหมดสืบทอดมาจากพาเรนต์หรือค่าเริ่มต้น (แม้จะมีการกำหนดไว้อย่างชัดเจนหรือไม่ก็ตาม) POM ฐานนี้เรียกว่าSuper POMและมีค่าที่สืบทอดมาตามค่าเริ่มต้น
Maven ใช้ POM ที่มีประสิทธิภาพ (การกำหนดค่าจากการกำหนดค่าโครงการ super pom plus) เพื่อดำเนินการตามเป้าหมายที่เกี่ยวข้อง ช่วยให้นักพัฒนาระบุรายละเอียดการกำหนดค่าขั้นต่ำใน pom.xml ของเขา / เธอ แม้ว่าการกำหนดค่าจะสามารถลบล้างได้อย่างง่ายดาย
วิธีง่ายๆในการดูการกำหนดค่าเริ่มต้นของ super POM คือการรันคำสั่งต่อไปนี้: mvn help:effective-pom
สร้าง pom.xml ในไดเร็กทอรีบนคอมพิวเตอร์ของคุณใช้เนื้อหาของ pom ตัวอย่างที่กล่าวถึงข้างต้น
ในตัวอย่างด้านล่างเราได้สร้าง pom.xml ในโฟลเดอร์ C: \ MVN \ project
ตอนนี้เปิดคอนโซลคำสั่งไปที่โฟลเดอร์ที่มี pom.xml และดำเนินการต่อไปนี้ mvn คำสั่ง
C:\MVN\project>mvn help:effective-pom
Maven จะเริ่มประมวลผลและแสดงผล -pom
[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 ที่มีประสิทธิภาพจะแสดงเป็นผลลัพธ์ในคอนโซลหลังจากใช้การสืบทอดการแก้ไขและโปรไฟล์
<?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>
ใน pom.xml ด้านบนคุณสามารถดูโครงสร้างโฟลเดอร์ต้นทางโปรเจ็กต์ไดเร็กทอรีเอาต์พุตปลั๊กอินที่จำเป็นที่เก็บไดเร็กทอรีการรายงานซึ่ง Maven จะใช้ในขณะดำเนินการตามเป้าหมายที่ต้องการ
Maven pom.xml ไม่จำเป็นต้องเขียนด้วยตนเอง Maven มีปลั๊กอิน archetype จำนวนมากเพื่อสร้างโปรเจ็กต์ซึ่งตามลำดับจะสร้างโครงสร้างโปรเจ็กต์และ pom.xml