Maven POM 项目对象模型 (Project Object Model)

什么是 POM

在 maven 项目中描述 POM 的最简单方法是,它只不过是任何 maven 项目的核心元素。 基本上,任何 maven 项目都包含一个名为 pom.xml 的可配置文件,它是 Project Object Model 的缩写。这个 pom.xml 将始终位于任何 maven 项目的根目录中。 该文件表示 Maven 中非常基本和基本的单元。

pom.xml 基本上包含与已构建或将要构建的项目相关的信息。它包含有关配置详细信息、包含的依赖项和包含在项目中的插件的所有必要信息。 简单来说,它包含项目构建生命周期的详细信息。

下面是一些可以在 pom.xml 文件中处理的配置:

  • 项目中使用的依赖项(Jar 文件)
  • 使用的插件(报告插件)
  • 项目版本
  • 参与项目的开发人员
  • 邮件列表
  • 报告
  • 构建配置文件

Pom.xml 文件示例

一个典型的简单 java 项目的 pom.xml 如下所示

<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.jiyik.application1</groupId>  
  <artifactId>my-app</artifactId>  
  <version>1</version>  
  
</project>  
元素 描述
project 它是 pom.xml 文件的根元素。
modelVersion 它是 project 的子元素。 它指定模型版本。 它应该设置为 4.0.0。
groupId 它是 project 的子元素。 它指定项目组的 ID。
artifactId 它是 project 的子元素。 它指定工程(项目)的 ID。 工程是项目生产或使用的东西。 Maven 为项目生成的工程示例包括:JAR、源代码和二进制分发以及 WAR。
version 它是 project 的子元素。 它指定给定组下工程的版本。

带有其他元素的 Maven pom.xml 文件

在这里,我们将在 pom.xml 文件中添加其他元素,例如:

<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.jiyik.application1</groupId>  
  <artifactId>my-application1</artifactId>  
  <version>1.0</version>  
  <packaging>jar</packaging>  
  
  <name>Maven Quick Start Archetype</name>  
  <url>http://maven.apache.org</url>  
  
  <dependencies>  
    <dependency>  
      <groupId>junit</groupId>  
      <artifactId>junit</artifactId>  
      <version>4.8.2</version>  
      <scope>test</scope>  
    </dependency>  
  </dependencies>  
  
</project>  
元素 描述
packaging 定义包的类型,例如 jar、war 等。
name 定义 Maven 项目的名称。
url 定义项目的 url。
dependencies 定义此项目的依赖项。
dependency 定义一个依赖。 它在依赖项中使用。
scope 定义了这个 Maven 项目的范围。 它可以是compile、provided、runtime、test和system。

scope 几项的说明:

  1. compile:默认的scope,运行期有效,需要打入包中
  2. provided:编译期有效,运行期不需要提供,不会打入包中
  3. runtime:编译不需要,在运行期有效,需要导入包中。(接口与实现分离)
  4. test:测试需要,不会打入包中
  5. system:非本地仓库引入、存在系统的某个路径下的jar。(一般不使用)

查看笔记

扫码一下
查看教程更方便