POM
POM代表项目对象模型。 它是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的最低要求 -
Sr.No. | 节点和描述 |
---|---|
1 | Project root 这是项目根标记。 您需要指定基本架构设置,例如apache架构和w3.org规范。 |
2 | Model version 型号版本应为4.0.0。 |
3 | groupId 这是项目组的ID。 这在组织或项目中通常是独一无二的。 例如,银行集团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. |
超级POM
Super POM是Maven的默认POM。 所有POM都继承自父级或默认(尽管明确定义与否)。 此基本POM称为Super POM ,包含默认继承的值。
Maven使用有效的POM(来自超级pom和项目配置的配置)来执行相关目标。 它可以帮助开发人员在他/她的pom.xml中指定最小配置细节。 虽然配置可以轻松覆盖。
查看超级POM的默认配置的简单方法是运行以下命令: mvn help:effective-pom
在您的计算机上的任何目录中创建一个pom.xml。使用上述示例pom的内容。
在下面的示例中,我们在C:\MVN\project文件夹中创建了一个pom.xml。
现在打开命令控制台,转到包含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提供了许多原型插件来创建项目,按顺序创建项目结构和pom.xml