pom.xml 介绍
pom 作为项目对象模型。通过 xml 表示 maven 项目,使用 pom.xml 来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
pom 中的描述信息都是用xml标签的方式,其中包含双标签和单标签,最顶部用于描述 xml 得版本和编码,其次是以 project 开头得双标签并表示为一个项目,定义了该项目可用内容及规范。
# 双标签
<project></project>
# 单标签
<project/>
对于 pom 可用内容较多,一级标签有如下表所示,但常用的都会有对应的描述
标签 | 描述 |
---|---|
modelVersion | 当前模型使用的版本 |
parent | 继承某个pom,部分是不可继承的 |
groupId | 公司或组织着唯一标识,如 org.springframework.boot 第一段是域(org、com 非盈利组织、商业组织),第二段是公司名称,第三段是应用名称 |
artifactId | 项目的唯一ID |
version | 项目所属的版本号 |
name | 项目名称 |
description | 项目描述信息 |
properties | 配置信息描述,更多的是描述依赖jar版本、项目版本等 |
dependencies | 所要依赖的jar都需要在这里描述 |
build | 构建信息,包括插件,资源文件信息等 |
profiles | 作用于项目环境的切换(dev、test、produce) |
packaging | 描述项目的类型,可选pom、jar、war |
repositories | 用是用来配置maven项目的远程仓库,可以是私服(nexus) |
modules | 用来配置子项目 |
dependencyManagement | 用来提供了一种管理依赖版本号的方式。通常会在项目的最顶层的父POM 中看到该元素。使用pom.xml 中的dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号 |
distributionManagement | 用于分发构件到远程仓库;mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库。本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。 |
pluginRepositories | 配置Maven从什么地方下载插件 |
scm | 集成了软件配置管理的,他可以支持我们常用SVN、CVS等 |
developers | 配置开发者信息,例如:一个开发者可以有多个roles,properties |
issueManagement | bug跟踪管理系统,定义defect tracking system缺陷跟踪系统 |
reporting | 包含site生成阶段的一些元素,某些maven plugin可以生成 reports 并且在 reporting 下配置 |
url | 开发团队的网站,无关紧要可选 |
licenses | 许可证信息配置 |
organization | 配置组织信息 |
ciManagement | ? |
contributors | ? |
inceptionYear | ? |
mailingLists | ? |
prerequisites | ? |
reports | ? |
以一个 spring boot 常规项目做为示例:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 继承spring-boot使用他的相关依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.9</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 组织,应用 -->
<groupId>com.xxx.boot</groupId>
<!-- 项目ID,一般都喜欢是名称 -->
<artifactId>framework</artifactId>
<!-- 版本 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 项目名称 -->
<name>newFramework</name>
<description>Demo project for Spring Boot</description>
<!-- 配置描述 -->
<properties>
<!-- java版本,但这个实际没什么用,单做一种描述信息看 -->
<java.version>17</java.version>
<!-- 实际指定编译版本可以使用如下 -->
<maven.complier.source>17</maven.complier.source>
<maven.complier.target>17</maven.complier.target>
</properties>
<!-- 依赖 -->
<dependencies>
<!-- 具体依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 构建信息 -->
<build>
<!-- 插件 -->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
parent 标签详解
<parent></parent>
标签用于继承父项目的各类依赖及其他配置信息,如版本,构建信息,配置描述等,具体范围包括:
# 可以继承部分
groupId、version、description、url、inceptionYear、organization、licenses、developers、contributors、mailingLists、scm、issueManagement、ciManagement、properties、dependencyManagement、dependencies、repositories、pluginRepositories、build、reporting、profiles
# 不可继承部分
artifactId、name、prerequisites
一个 parent 里所包含全部内容有:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.9</version>
<relativePath/>
</parent>
<relativePath/>
元素,它可以单标签也可以是双标签<relativePath>../my-parent</relativePath>
。它不是必需的,但可以用作 Maven 的指示符,然后先搜索该项目的父级的给定路径,然后再搜索本地和远程存储库,单标签为默认从当前pom.xml的父级目录查找。
properties 标签详解
<properties></properties>
没有提供什么实质性的内容供我们使用,检查下来在里面最多可以在描述一个<project></project>
标签可用,但作用并不是不大。实际作用更多在于描述我们依赖jar的版本等。
<properties>
<!-- java版本,但这个实际没什么用,单做一种描述信息看 -->
<java.version>17</java.version>
<!-- 实际指定编译版本可以使用如下 -->
<maven.complier.source>17</maven.complier.source>
<maven.complier.target>17</maven.complier.target>
<!-- 定义lombok版本 -->
<lombok.version>1.18.24</lombok.version>
<project.version>0.0.1-SNAPSHOT</project.version>
</properties>
<!-- 项目版本 -->
<version>${project.version}</version>
<!-- 依赖 -->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>