介绍
什么是POM?
POM代表“项目对象模型”。它是一个名为pom.XML
的文件中保存的Maven项目的XML表示。
快速概览
这是一个直接位于POM项目元素下的元素列表。请注意,modelVersion
包含4.0.0。这是目前唯一支持的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- More Project Information -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Environment Settings -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
一个简单的配置示例
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8"?>
<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.study</groupId>
<artifactId>kafka-meter</artifactId>
<version>1.0</version>
<description>Kafka plugin for JMeter</description>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<apache.jmeter.core>5.4.1</apache.jmeter.core>
<org.log4j>2.11.1</org.log4j>
<sf.kafka.api.core.version>1.18.2</sf.kafka.api.core.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>${apache.jmeter.core}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${org.log4j}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${org.log4j}</version>
</dependency>
<dependency>
<groupId>com.sf.kafka</groupId>
<artifactId>sf-kafka-api-core</artifactId>
<version>${sf.kafka.api.core.version}</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
基础配置(The Basics)
POM包含关于项目的所有必要信息,以及构建过程中要使用的插件的配置。
代码语言:javascript复制<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>org.codehaus.mojo</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
</project>
Maven坐标(Coordinates)
上面定义的POM是Maven允许的最小配置。groupId:artifactId:version
都是必需字段(不过,如果从父级继承groupId
和version
,则不需要显式定义它们-稍后将详细介绍继承)。这三个字段的作用非常像一个地址和时间戳。这标志着仓库中的一个特定位置,就像Maven项目的坐标系一样:
- groupId: 这在一个组织或项目中通常是独一无二的。例如,所有的核心Maven工件都应该位于
groupId
org.apache.Maven
下。groupId
不一定使用点符号,例如junit项目。请注意,点标记的groupId
不必与项目包含的包结构相对应。然而,这是一个很好的做法。当存储在仓库中时,该组的行为与操作系统中的Java包结构非常相似。点被操作系统特定的目录分隔符(如Unix中的“/”)所取代,后者成为Base仓库的相对目录结构。在给定的示例中,org.codehaus.mojo
组位于目录$M2_REPO/org/codehaus/mojo
中。 - artifactId:
artifactId
通常是项目的名称。尽管groupId
很重要,但组内的人很少在讨论中提到groupId
(他们通常都是同一个ID,例如MojoHaus项目groupId:org.codehaus.mojo
)。artifactId
和groupId
一起创建了一个Key,将这个项目与世界上其他所有项目区分开来(至少,它应该