POM代表项目对象模型。这是Maven的基本工作单位。它是一个XML文件。它始终作为pom.xml驻留在项目的基本目录中。
POM包含有关项目的信息以及Maven用于创建项目的各种配置详细信息。
POM还包含目标和插件。在执行任务或目标时,Maven会在当前目录中查找POM。它读取POM,获取所需的配置信息,然后执行目标。可以在POM中指定的一些配置如下:
项目依赖
插件
目标
创建配置文件
项目版本
开发商
邮件列表
在创建POM之前,我们应该首先确定项目组(groupId),其name(artifactId)及其版本,因为这些属性有助于在存储库中唯一标识项目。
<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文件都需要项目元素和三个必填字段:groupId,artifactId,version。
存储库中的项目符号是groupId:artifactId:version。
POM.xml的根元素是项目,它有三个主要的childNode:
节点 | 描述 |
---|---|
groupId | 这是项目组的ID。这在组织或项目中通常是独一无二的。例如,一家银行集团com.company.bank拥有所有银行相关项目。 |
artifactId | 这是项目的ID。这通常是项目的名称。例如,消费银行。与groupId一起,artifactId定义了工件在存储库中的位置。 |
版 | 这是项目的版本。使用groupId,它在工件的存储库中用于将版本彼此分离。例如:
com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1。 |
所有POM都从父级继承(尽管已明确定义)。这个基础POM被称为超级POM,并包含默认值继承的值。
Maven使用有效的pom(配置从超级pom加项目配置)执行相关目标。它帮助开发人员在他/她的pom.xml中指定最小配置细节。虽然可以轻松地覆盖配置。
查看超级POM的默认配置的简单方法是运行以下命令:mvn help:effective-pom
在您的计算机上的任何目录中创建一个pom.xml。使用上述示例pom的内容。
在下面的例子中,我们在C: MVN project文件夹中创建了一个pom.xml。
现在打开命令控制台,去包含pom.xml的文件夹,然后执行下面的mvn命令。
C:MVNproject>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,继承,插值和配置文件后应用。
<!-- ====================================================================== --> <!-- --> <!-- Generated by Maven Help Plugin on 2015-09-26T07:51:19 --> <!-- See: http://maven.apache.org/plugins/maven-help-plugin/ --> <!-- --> <!-- ====================================================================== --> <!-- ====================================================================== --> <!-- --> <!-- Effective POM for project --> <!-- "com.companyname.project-group:project: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 h ttp://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> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> </pluginRepository> </pluginRepositories> <build> <sourceDirectory>C:MVNprojectsrcmainjava</sourceDirectory> <scriptSourceDirectory>C:MVNprojectsrcmainscripts</scriptSourceDirector y> <testSourceDirectory>C:MVNprojectsrc estjava</testSourceDirectory> <outputDirectory>C:MVNproject argetclasses</outputDirectory> <testOutputDirectory>C:MVNproject arget est-classes</testOutputDirectory > <resources> <resource> <directory>C:MVNprojectsrcmain esources</directory> </resource> </resources> <testResources> <testResource> <directory>C:MVNprojectsrc est esources</directory> </testResource> </testResources> <directory>C:MVNproject arget</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-5</version> </plugin> <plugin> <artifactId>maven-dependency-plugin</artifactId> <version>2.8</version> </plugin> <plugin> <artifactId>maven-release-plugin</artifactId> <version>2.3.2</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <executions> <execution> <id>default-clean</id> <phase>clean</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>default-install</id> <phase>install</phase> <goals> <goal>install</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>default-resources</id> <phase>process-resources</phase> <goals> <goal>resources</goal> </goals> </execution> <execution> <id>default-testResources</id> <phase>process-test-resources</phase> <goals> <goal>testResources</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <executions> <execution> <id>default-test</id> <phase>test</phase> <goals> <goal>test</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <executions> <execution> <id>default-testCompile</id> <phase>test-compile</phase> <goals> <goal>testCompile</goal> </goals> </execution> <execution> <id>default-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>default-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.7</version> <executions> <execution> <id>default-deploy</id> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.3</version> <executions> <execution> <id>default-site</id> <phase>site</phase> <goals> <goal>site</goal> </goals> <configuration> <outputDirectory>C:MVNproject argetsite</outputDirectory> <reportPlugins> <reportPlugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </reportPlugin> </reportPlugins> </configuration> </execution> <execution> <id>default-deploy</id> <phase>site-deploy</phase> <goals> <goal>deploy</goal> </goals> <configuration> <outputDirectory>C:MVNproject argetsite</outputDirectory> <reportPlugins> <reportPlugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </reportPlugin> </reportPlugins> </configuration> </execution> </executions> <configuration> <outputDirectory>C:MVNproject argetsite</outputDirectory> <reportPlugins> <reportPlugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </reportPlugin> </reportPlugins> </configuration> </plugin> </plugins> </build> <reporting> <outputDirectory>C:MVNproject argetsite</outputDirectory> </reporting> </project>
在上述pom.xml中,您可以在执行所需目标时看到默认的项目源文件夹结构,输出目录,必需的插件,存储库,Maven将使用的报告目录。
Maven pom.xml也不需要手动写入。
Maven提供了许多prototype插件来创建项目,以便创建项目结构和pom.xml