我们在开发Java应用程序时,pom.xml文件是项目中的核心配置文件之一,它结合Maven实现对项目依赖的拉取,今天就详细了解一下pom.xml文件的配置
Maven是一种构建工具,它用于构建、管理和发布Java项目pom.xml文件包含了项目的所有重要信息,包括项目的依赖、构建插件、版本信息等
什么是pom.xml文件
pom.xml文件是Maven项目的核心配置文件,它以XML格式编写。该文件的主要作用是定义项目的结构、依赖关系和构建过程。它包含了以下信息
项目坐标:pom.xml文件包含了项目的坐标信息,如groupId(组织或团队的标识符)、artifactId(项目的唯一标识符)和version(项目的版本号)
依赖管理:你可以在pom.xml中定义项目所依赖的外部库和组件;Maven会根据这些依赖关系自动下载所需的JAR文件,并将它们包括在项目的构建中
构建配置:pom.xml文件包含了构建插件的配置信息,这些插件用于编译、测试、打包和部署项目;你可以定义构建生命周期阶段和目标,以定制项目的构建过程
插件配置:除了构建插件,pom.xml还可以包含其他插件的配置信息,例如静态代码分析、代码生成和文档生成插件
仓库配置:你可以指定Maven仓库的位置,以便Maven能够从仓库中下载依赖项
项目描述:pom.xml文件通常包含有关项目的描述信息,以便其他开发人员了解项目的用途和功能
pom.xml的大致文件结构如下
<?xml version="1.0" encoding="UTF-8"?>
<!-- Maven 项目对象模型(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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- POM文件的模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目坐标,包括组织ID,项目ID和版本 -->
<groupId>com.example</groupId> <!-- 项目的组织或公司ID -->
<artifactId>my-java-app</artifactId> <!-- 项目的唯一ID -->
<version>1.0.0</version> <!-- 项目的版本号 -->
<packaging>jar</packaging> <!-- 项目打包类型 -->
<name>My Maven Project</name> <!-- 项目的名称,可选 -->
<!-- 项目的描述 -->
<description>This is a sample Maven project.</description>
<!-- 项目的URL,可选 -->
<url>http://example.com/my-maven-project</url>
<!-- 项目依赖声明部分 -->
<dependencies>
<!-- 对Spring框架核心模块的依赖 -->
<dependency>
<groupId>org.springframework</groupId> <!-- 依赖的组织或公司ID -->
<artifactId>spring-core</artifactId> <!-- 依赖的唯一ID -->
<version>5.2.6.RELEASE</version> <!-- 依赖的版本号 -->
</dependency>
<!-- 其他依赖可以在这里添加 -->
</dependencies>
<!-- 构建配置部分 -->
<build>
<plugins>
<!-- Maven编译插件的配置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId> <!-- 插件的组织或公司ID -->
<artifactId>maven-compiler-plugin</artifactId> <!-- 插件的唯一ID -->
<version>3.8.1</version> <!-- 插件的版本号 -->
<configuration>
<source>1.8</source> <!-- Java源代码的兼容版本 -->
<target>1.8</target> <!-- Java目标代码的兼容版本 -->
</configuration>
</plugin>
<!-- 其他构建插件可以在这里添加 -->
</plugins>
</build>
<!-- 构建配置 -->
<build>
<plugins>
<!-- Maven插件配置示例 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- 其他构建插件,如maven-surefire-plugin等 -->
</plugins>
<!-- 资源配置 -->
<resources>
<!-- 描述存放资源的目录,该路径相对POM路径 -->
<resource>
<directory>src/main/java</directory>
<!-- 包含的模式列表,例如**/*.xml -->
<includes>
<include>**/*.xml</include>
</includes>
<!-- 是否使用参数值代替参数名 -->
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
<!-- 仓库配置部分 -->
<repositories>
<!-- Maven中央仓库的配置 -->
<repository>
<id>central</id> <!-- 仓库的唯一ID -->
<url>https://repo.maven.apache.org/maven2</url> <!-- 仓库的URL地址 -->
</repository>
<!-- 其他仓库可以在这里添加 -->
</repositories>
</project>
接下来我会进行讲解
1.项目坐标
项目坐标:pom.xml文件包含了项目的坐标信息,如groupId(组织或团队的标识符)、artifactId(项目的唯一标识符)和version(项目的版本号)
这是简单的项目坐标,当然有的还有父类和子类继承关系
如下,这样的话父类所有的数据都会进入子类(比如所有加的第三方依赖)
有父类的话子类在<parent>一般加上<relativePath/> 这个注解
在这个示例中,子类<relativePath/> 元素的值留空,表示Maven将查找父项目的POM文件,而不需要额外的路径,这样可以避免去Maven仓库查找
有些使用版本也是父类锁定的,比如微服务
<!-- 锁定SpringCloud和SpringCloud-alibaba的版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.7.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
父类对于子类会加上模版
<modules>
<module>cloud-模版1</module>
<module>cloud-模版2</module>
<module>cloud-模版3</module>
</modules>
2.属性配置
<properties> 元素是一个容器,其中包含定义的属性;在这个元素内部,你可以定义各种属性,每个属性都有一个名称和一个对应的值
也可以使用自定义属性赋值
<hutool.version>5.0.6</hutool.version>
<!--在hutool包版本加上${hutool.version}使用-->
3.依赖管理
依赖管理:你可以在pom.xml中定义项目所依赖的外部库和组件;Maven会根据这些依赖关系自动下载所需的JAR文件,并将它们包括在项目的构建中
排除依赖
依赖传递
依赖项的适用范围
<scope>test</scope>
<dependencies>
<!-- 1. 默认范围是 compile -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!-- 2. 通过 scope 指定 provided 范围 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- 3. runtime 范围 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.8.RELEASE</version>
<scope>runtime</scope>
</dependency>
<!-- 4. test 范围,仅用于测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
解释如下
compile(默认值):
这是默认的范围。依赖项在编译、测试和运行阶段都可用
例如:<scope>compile</scope>
provided:
这个范围表明依赖项在编译和测试阶段可用,但在运行时由目标环境(例如 servlet 容器)提供
例如:<scope>provided</scope>
runtime:
依赖项在运行时是可用的,但在编译和测试阶段不是
例如:<scope>runtime</scope>
test:
这个范围表示依赖项仅在测试代码编译和执行测试时可用,不会包含在最终构建的产品中
例如:<scope>test</scope>
system:
这个范围类似于 provided,但需要显式提供 jar 文件的路径
例如:<scope>system</scope>
import:
这个范围仅适用于 <dependencyManagement> 部分的依赖项;它表示依赖项是由 dependencyManagement 部分的导入语句所引入的
例如:<scope>import</scope>
4.构建配置
pom.xml文件包含了构建插件的配置信息,这些插件用于编译、测试、打包和部署项目;你可以定义构建生命周期阶段和目标,以定制项目的构建过程
5.插件配置
除了构建插件,pom.xml还可以包含其他插件的配置信息,例如静态代码分析、代码生成和文档生成插件
6.仓库配置
你可以指定Maven仓库的位置,以便Maven能够从仓库中下载依赖项
也可以使用nexus 私服Nexus搭建以及拉取上传依赖_大白猫~的博客-CSDN博客
7.项目描述
pom.xml文件通常包含有关项目的描述信息,以便其他开发人员了解项目的用途和功能
这样子简单的pom.xml结构就讲完了