Maven POM

POM(Project Object Model,项目对象模型)是 Maven 的基本组件,它是以 xml 文件的形式存放在项目的根目录下,名称为 pom.xml。

POM 中定义了项目的基本信息,用于描述项目如何构建、声明项目依赖等等。

当 Maven 执行一个任务时,它会先查找当前项目的 POM 文件,读取所需的配置信息,然后执行任务。在 POM 中可以设置如下配置:

  • 项目依赖
  • 插件
  • 目标
  • 构建时的配置文件
  • 版本 
  • 开发者
  • 邮件列表

在创建 POM 之前,首先要确定工程组(groupId),及其名称(artifactId)和版本,在仓库中这些属性是项目的唯一标识。

POM 示例

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>net.biancheng.www</groupId>
  6. <artifactId>maven</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. </project>

所有的 Maven 项目都有一个 POM 文件,所有的 POM 文件都必须有 project 元素和 3 个必填字段:groupId、artifactId 以及 version。

节点描述
groupId项目组 ID,定义当前 Maven 项目隶属的组织或公司,通常是唯一的。它的取值一般是项目所属公司或组织的网址或 URL 的反写,例如 net.biancheng.www。
artifactId项目 ID,通常是项目的名称。groupId 和 artifactId 一起定义了项目在仓库中的位置。
version项目版本。

Super POM

无论 POM 文件中是否显示的声明,所有的 POM 均继承自一个父 POM,这个父 POM 被称为 Super POM,它包含了一些可以被继承的默认设置。

Maven 使用 effective pom (Super POM 的配置加上项目的配置)来执行相关任务,它替开发人员在 pom.xml 中做了一些最基本的配置。当然,开发人员依然可以根据需要重写其中的配置信息。

执行以下命令 ,就可以查看 Super POM 的默认配置。

  • mvn help:effective-pom

示例

1. 在 D 盘创建一个名为 maven 的目录,将 POM 示例中的 pom.xml 文件移动至该文件夹下。

2. 打开命令行窗口,跳转到 pom.xml 所在的目录下,执行以下 mvn 命令。

  • mvn help:effective-pom

3. Maven 将会开始执行命令并显示 effective-pom 的内容,执行结果如下。

  • [INFO] Scanning for projects...
  • [INFO]
  • [INFO] ----------------------< net.biancheng.www:maven >-----------------------
  • [INFO] Building maven 0.0.1-SNAPSHOT
  • [INFO] --------------------------------[ jar ]---------------------------------
  • [INFO]
  • [INFO] --- maven-help-plugin:3.2.0:effective-pom (default-cli) @ maven ---
  • [INFO]
  • Effective POMs, after inheritance, interpolation, and profiles are applied:
  • <?xml version="1.0" encoding="GBK"?>
  • <!-- ====================================================================== -->
  • <!-- -->
  • <!-- Generated by Maven Help Plugin on 2021-02-26T15:25:25+08:00 -->
  • <!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
  • <!-- -->
  • <!-- ====================================================================== -->
  • <!-- ====================================================================== -->
  • <!-- -->
  • <!-- Effective POM for project 'net.biancheng.www:maven:jar:0.0.1-SNAPSHOT' -->
  • <!-- -->
  • <!-- ====================================================================== -->
  • <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  • <modelVersion>4.0.0</modelVersion>
  • <groupId>net.biancheng.www</groupId>
  • <artifactId>maven</artifactId>
  • <version>0.0.1-SNAPSHOT</version>
  • <dependencies>
  • <dependency>
  • <groupId>junit</groupId>
  • <artifactId>junit</artifactId>
  • <version>4.9</version>
  • <scope>compile</scope>
  • </dependency>
  • <dependency>
  • <groupId>log4j</groupId>
  • <artifactId>log4j</artifactId>
  • <version>1.2.17</version>
  • <scope>compile</scope>
  • </dependency>
  • </dependencies>
  • <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>D:\maven\src\main\java</sourceDirectory>
  • <scriptSourceDirectory>D:\maven\src\main\scripts</scriptSourceDirectory>
  • <testSourceDirectory>D:\maven\src\test\java</testSourceDirectory>
  • <outputDirectory>D:\maven\target\classes</outputDirectory>
  • <testOutputDirectory>D:\maven\target\test-classes</testOutputDirectory>
  • <resources>
  • <resource>
  • <directory>D:\maven\src\main\resources</directory>
  • </resource>
  • </resources>
  • <testResources>
  • <testResource>
  • <directory>D:\maven\src\test\resources</directory>
  • </testResource>
  • </testResources>
  • <directory>D:\maven\target</directory>
  • <finalName>maven-0.0.1-SNAPSHOT</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.5.3</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-resources-plugin</artifactId>
  • <version>2.6</version>
  • <executions>
  • <execution>
  • <id>default-testResources</id>
  • <phase>process-test-resources</phase>
  • <goals>
  • <goal>testResources</goal>
  • </goals>
  • </execution>
  • <execution>
  • <id>default-resources</id>
  • <phase>process-resources</phase>
  • <goals>
  • <goal>resources</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-compiler-plugin</artifactId>
  • <version>3.1</version>
  • <executions>
  • <execution>
  • <id>default-compile</id>
  • <phase>compile</phase>
  • <goals>
  • <goal>compile</goal>
  • </goals>
  • </execution>
  • <execution>
  • <id>default-testCompile</id>
  • <phase>test-compile</phase>
  • <goals>
  • <goal>testCompile</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-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-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>D:\maven\target\site</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>D:\maven\target\site</outputDirectory>
  • <reportPlugins>
  • <reportPlugin>
  • <groupId>org.apache.maven.plugins</groupId>
  • <artifactId>maven-project-info-reports-plugin</artifactId>
  • </reportPlugin>
  • </reportPlugins>
  • </configuration>
  • </execution>
  • </executions>
  • <configuration>
  • <outputDirectory>D:\maven\target\site</outputDirectory>
  • <reportPlugins>
  • <reportPlugin>
  • <groupId>org.apache.maven.plugins</groupId>
  • <artifactId>maven-project-info-reports-plugin</artifactId>
  • </reportPlugin>
  • </reportPlugins>
  • </configuration>
  • </plugin>
  • </plugins>
  • </build>
  • <reporting>
  • <outputDirectory>D:\maven\target\site</outputDirectory>
  • </reporting>
  • </project>
  • [INFO] ------------------------------------------------------------------------
  • [INFO] BUILD SUCCESS
  • [INFO] ------------------------------------------------------------------------
  • [INFO] Total time: 2.621 s
  • [INFO] Finished at: 2021-02-26T15:25:27+08:00
  • [INFO] ------------------------------------------------------------------------

你可以看到 effective-pom 中包含了 Maven 在执行任务时需要用到的默认目录结构、输出目录、插件、仓库和报表目录等内容。

实际开发过程中,Maven 的 pom.xml 文件不需要手工编写,Maven 提供了大量的原型(Archetype)插件来创建项目,包括项目结构和 pom.xml。

腾讯云推出云产品限时特惠抢购活动:2C2G云服务器7.9元/月起
本文链接:https://www.jhelp.net/p/1mfjjkyyBYe6o9tB (转载请保留)。
关注下面的标签,发现更多相似文章