<?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> <!-- 指定POM模型的版本 -->
<!-- 项目的坐标 -->
<groupId>com.example</groupId> <!-- 项目的组织或团队的唯一标识符 -->
<artifactId>my-app</artifactId> <!-- 项目的唯一标识符,通常用于生成构建后的文件名 -->
<version>1.0-SNAPSHOT</version> <!-- 项目的版本号,SNAPSHOT表示这是一个开发版本 -->
<packaging>jar</packaging><!--当你创建一个新的 Maven 项目时,你需要在 pom.xml 文件中指定 <packaging> 标签以决定项目的打包类型。对于库项目,你可能会选择 jar 打包类型;对于 Web 项目,你可能会选择 war 打包类型;而对于包含多个子模块的聚合项目,你可能会选择 pom 打包类型。默认类型是jar-->
<url>http://www.example.com/my-project</url> <!--<url> 标签的值是一个指向项目官方网站的 URL。-->
<!-- 项目的依赖管理 -->
<dependencies>
<!-- 添加项目依赖 -->
<dependency>
<groupId>junit</groupId> <!-- 依赖的groupId -->
<artifactId>junit</artifactId> <!-- 依赖的artifactId -->
<version>4.13.2</version> <!-- 依赖的版本号 -->
<scope>test</scope> <!-- 依赖的作用范围,test表示这个依赖只在测试时使用 -->
<!--
compile(默认值)-该依赖项在项目的所有类路径下都是可用的,也就是说它对于编译、测试、运行项目都是必需的。该依赖项会被包含在最终的构建产物中,例如 JAR 或 WAR 文件。
test-该依赖项只在测试类路径下可用,也就是说它只用于编译和运行测试代码。它不会被包含在最终的构建产物中。
provided-该依赖项在编译和测试类路径下都是可用的,但在运行时将由 JDK 或容器提供,因此不会被包含在最终的构建产物中。例如,如果你正在编写一个运行在 Servlet 容器中的 Web 应用,你可能需要将 Servlet API 的依赖项设置为 provided,因为 Servlet 容器会提供这些类。
runtime-该依赖项在测试和运行时类路径下都是可用的,但在编译主代码时不可用。它通常用于那些编译时不需要,但在运行时需要的库。
system-该依赖项与 provided 类似,但你必须显式地指定依赖项的路径。由于它指向系统中的一个文件,因此它不会被包含在 Maven 的仓库中,也不会被其他项目所引用。使用 system 作用域应该谨慎,因为它降低了构建的可移植性。
import-(仅用于 <dependencyManagement>)该作用域只用于 <dependencyManagement> 元素中,它表示将另一个 POM 文件的 <dependencyManagement> 部分导入到当前 POM 的 <dependencies> 部分中。它不实际引入依赖项,而是提供一种在多个项目中共享依赖项配置的方法。
-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- <scope>test</scope> 若dependencyManagement管理了版本,则引入依赖时就不用再加版本了 -->
</dependency>
</dependencies>
<!-- 项目的构建配置 -->
<build>
<!-- <build>标签中常见的子元素有<directory>、<finalName>、<plugins>等。<directory>用于指定构建输出的目录,即编译后的class文件和打包后的jar文件存放的位置,默认为${basedir}/target。<finalName>则用于指定打包后的文件名。-->
<plugins>
<!-- 配置构建插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId> <!-- 插件的groupId -->
<artifactId>maven-compiler-plugin</artifactId> <!-- 插件的artifactId -->
<version>3.8.1</version> <!-- 插件的版本号 -->
<configuration>
<source>1.8</source> <!-- 源代码使用的Java版本 -->
<target>1.8</target> <!-- 目标代码编译的Java版本 -->
</configuration>
</plugin>
</plugins>
</build>
<!-- 项目的其他配置,如属性、仓库等 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 设置项目的源文件编码为UTF-8 -->
<maven.compiler.source>1.8</maven.compiler.source> <!-- 设置源代码使用的Java版本为1.8 -->
<maven.compiler.target>1.8</maven.compiler.target> <!-- 设置目标代码编译的Java版本为1.8 -->
<springboot.web.version>2.5.5</springboot.web.version> <!-- 设置目标代码编译的Java版本为1.8 -->
</properties>
<!-- 项目继承与聚合配置 -->
<parent>
<!-- 如果当前项目是一个子项目,这里可以指定父项目的坐标 -->
<relativePath> <!--子标签,它用于标注父工程的 pom.xml 文件的相对位置。这个相对位置的起点是当前 pom.xml 所属工程的目录,默认值为 ../pom.xml。如果这个工程是父工程的子工程,即子工程文件夹位于父工程文件夹内,那么通常使用默认值即可。<relativePath> 标签的作用体现在以下几个方面:
1)指定查找父项目 pom.xml 的路径:Maven 在构建项目时,需要加载父项目的 pom.xml 以获取继承的依赖、插件配置等信息。<relativePath> 标签可以提供一个相对路径,使 Maven 能够定位并加载父项目的 pom.xml。
2)控制查找顺序:如果没有指定 <relativePath> 标签,Maven 会按照默认的顺序来查找父项目的 pom.xml,通常是从本地仓库查找,然后再到远程仓库查找。而如果指定了 <relativePath>,Maven 将首先根据该路径在本地文件系统中查找,找不到的话再去仓库中查找。
3)处理继承问题:在某些情况下,子项目可能无法正确继承父项目的配置,这可能是由于父项目的 pom.xml 文件位置不正确或无法被正确识别。通过指定 <relativePath>,可以确保 Maven 能够找到正确的父项目 pom.xml,从而解决继承问题。-->
</parent>
<modules>
<!-- 如果当前项目是一个聚合项目,这里可以列出所有的子模块 -->
<module>module1</module>
</modules>
<!-- 项目的分发管理配置 -->
<distributionManagement>
<!-- 配置项目的分发策略,如发布到Maven中央仓库等 这些配置完成,你可以通过运行mvn deploy命令来执行发布操作。Maven将使用这些配置来将构建结果推送到指定的仓库中。 -->
<repository><!--用于指定发布到正式仓库的URL。当项目完成并准备发布正式版本时,可以使用此元素来指定发布的目标仓库。-->
<id>OSS_Release</id> <!--库的ID,id与settings.xml中的server的id对应-->
<name>oss release repository</name> <!--库的名字-->
<url></url>
</repository>
<snapshotRepository><!--用于指定发布到快照仓库的URL。快照版本通常用于开发过程中的临时版本,这些版本可能随时发生变化。通过此元素,可以将这些临时版本发布到快照仓库,供其他开发人员或团队使用。-->
<id>OSS_Snapshot</id>
<name>oss snapshot repository</name>
<url></url>
</snapshotRepository>
</distributionManagement>
<!-- 项目的报告插件配置,平时用的不多 -->
<reporting>
<plugins>
<!-- 配置用于生成项目报告的插件 -->
</plugins>
</reporting>
<!-- 项目的其他配置信息 如果不是在部署环境打包用的比较少 -->
<profiles>
<!-- 配置项目的构建环境,如开发环境、测试环境、生产环境等 -->
<!--在命令行中,你可以通过以下方式激活不同的profile:使用 -P 参数激活特定的profile:mvn clean package -Pprod 将激活 prod profile。如果 dev profile 是默认激活的,那么你可以通过 -P!dev 来禁用它。-->
</profiles>
<!-- 项目依赖管理,通常用于统一管理多个项目的依赖 在这里定义了 在子模块或项目的其他部分中,<dependencies> 下引用而不需要指定版本-->
<dependencyManagement>
<dependencies>
<!-- 在这里定义依赖的版本,子项目可以继承这些定义 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 版本号也可以引用properties中配置的 -->
<version>${springboot.web.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
【Maven】pom常用配置标签详解
于 2024-03-12 20:30:00 首次发布