文章目录
- 1.pom.xml文件
-
- 1.1定义:
- 1.2文件的构成
-
- [1.2.1 基本信息](#1.2.1 基本信息)
- [1.2.2 打包类型(Packaging)](#1.2.2 打包类型(Packaging))
- [1.2.3 父项目(Parent)](#1.2.3 父项目(Parent))
- [1.2.4 依赖管理(Dependencies & Dependency Management)](#1.2.4 依赖管理(Dependencies & Dependency Management))
- [1.2.5 模块(Modules)](#1.2.5 模块(Modules))
- [1.2.6 构建配置(Build)](#1.2.6 构建配置(Build))
- [1.2.7 仓库配置(Repositories & Distribution Management)](#1.2.7 仓库配置(Repositories & Distribution Management))
- [1.2.8 其他配置](#1.2.8 其他配置)
- [1.3 坐标](#1.3 坐标)
-
- [1.3.1 坐标的概念](#1.3.1 坐标的概念)
- [1.3.2 坐标的意义](#1.3.2 坐标的意义)
- [1.3.3 坐标的含义](#1.3.3 坐标的含义)
- [1.4 依赖](#1.4 依赖)
-
- [1.4.1 依赖的意义](#1.4.1 依赖的意义)
- [1.4.2 依赖的范围](#1.4.2 依赖的范围)
- [1.4.3 依赖传递和可选依赖](#1.4.3 依赖传递和可选依赖)
- [1.5 仓库](#1.5 仓库)
-
- [1.5.1 概念](#1.5.1 概念)
1.pom.xml文件
1.1定义:
pom.xml(Project Object Model,项目对象模型)是 Maven 项目的核心配置文件,用于定义项目的基本信息、依赖、构建规则、插件等,是 Maven 实现自动化构建和依赖管理的基础
1.2文件的构成
1.2.1 基本信息
定义项目的唯一标识,用于在 Maven 仓库中定位项目(自身或依赖),是 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">
<!-- POM 模型版本(固定为 4.0.0,当前最新版本) -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目唯一标识三要素(GAV) -->
<groupId>com.example</groupId> <!-- 组织/公司标识(如域名反转) -->
<artifactId>my-project</artifactId> <!-- 项目/模块名称 -->
<version>1.0.0</version> <!-- 项目版本(如 SNAPSHOT 表示快照版) -->
<!-- 可选:项目名称、描述、URL 等 -->
<name>My Project</name>
<description>A sample Maven project</description>
<url>https://example.com/my-project</url>
</project>
1.2.2 打包类型(Packaging)
指定项目的打包格式,默认值为 jar,常用类型:
jar:普通 Java 项目,打包为 JAR 文件;
war:Web 项目,打包为 WAR 文件;
pom:父项目或聚合项目,用于统一管理子模块依赖或配置。
<packaging>war</packaging>
1.2.3 父项目(Parent)
用于继承父 POM 的配置(如依赖、插件),实现配置复用(类似 Java 继承)。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<!-- 可选:父 POM 相对路径(默认从仓库查找) -->
<relativePath/>
</parent>
1.2.4 依赖管理(Dependencies & Dependency Management)
dependencies:声明项目直接依赖的库(JAR 包等),Maven 会自动从仓库下载,并处理传递依赖(依赖的依赖)。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 版本可省略(若父 POM 中已通过 dependencyManagement 声明) -->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope> <!-- 依赖范围(如 test 表示仅测试时生效) -->
</dependency>
</dependencies>
1.2.5 模块(Modules)
用于聚合多个子模块(多模块项目),父项目的 packaging 需设为 pom,执行 Maven 命令时会自动递归处理所有子模块。
<modules>
<module>module-1</module> <!-- 子模块目录名 -->
<module>module-2</module>
</modules>
1.2.6 构建配置(Build)
定义项目构建规则,包括源码目录、输出目录、插件配置等。
<build>
<!-- 项目最终打包名称(默认:artifactId-version) -->
<finalName>my-app</finalName>
<!-- 源码/资源目录配置(默认已约定,可自定义) -->
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<!-- 插件配置:扩展 Maven 功能(如编译、打包、测试等) -->
<plugins>
<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> <!-- 编译后 class 文件版本 -->
</configuration>
</plugin>
</plugins>
</build>
1.2.7 仓库配置(Repositories & Distribution Management)
repositories:指定依赖下载的仓库地址(默认从 Maven 中央仓库下载,可添加私有仓库)
<repositories>
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
distributionManagement:配置项目部署的远程仓库(执行 mvn deploy 时使用),供团队共享。
<distributionManagement>
<repository>
<id>my-release-repo</id>
<url>https://repo.example.com/releases</url>
</repository>
<snapshotRepository>
<id>my-snapshot-repo</id>
<url>https://repo.example.com/snapshots</url>
</snapshotRepository>
</distributionManagement>
1.2.8 其他配置
properties:定义全局属性(如版本号、编码等),通过 ${属性名} 引用,便于统一维护。
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
profiles:定义不同环境的配置(如开发、测试、生产),通过 -P 环境名 激活,实现环境隔离。
<profiles>
<profile>
<id>dev</id>
<properties>
<env>development</env>
</properties>
</profile>
</profiles>
1.3 坐标
1.3.1 坐标的概念
在 Maven 中坐标是构件的唯一标识,Maven 坐标的元素包括 groupId、
artifactId、version、packaging、classifier。上述 5 个元素中,groupId、
artifactId、version 是必须定义的,packaging 是可选的 ( 默认为 jar )。
1.3.2 坐标的意义
Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范
拥有了统一规范,就可以把查找工作交给机器
1.3.3 坐标的含义
groupId:组织标识,一般为:公司网址的反写+项目名
artifactId:项目名称,一般为:项目名-模块名
version:版本号 形式为0.0.1-SNAPSHOT:
第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个 0 表示小
版本号
SNAPSHOT-- 快照版本,ALPHA-- 内侧版本,BETA-- 公测版本,
RELEASE-- 稳定版本,GA-- 正式发布
packaging:打包的方式,如:pom, jar, maven-plugin, ejb, war, ...
clissifier:用来帮助定义构件输出的一些附属构件。


1.4 依赖
1.4.1 依赖的意义
在写Java项目时,随着项目的进行,所需要的依赖会越来越多,而且项目引用的依赖也有可能会依赖其他依赖,所以为了简便项目依赖管理,使用maven进行管理,简化项目的依赖管理
1.4.2 依赖的范围
Maven 项目在开发工程中有三套classpath
主代码:main下面的都是主代码在编译的时候的依赖
测试代码:test下是测试代码编译的时候的依赖
运行时:main代码在运行的时候对包的依赖

共 6 种 scope,包括:compile、provided、runtime、test、system、import。
例如上图的junit,只在测试中使用,则选择test即可,默认为compile
1.4.3 依赖传递和可选依赖
依赖传递:例:
第一直接依赖: HelloFriend项目依赖Hello项目
第二直接依赖: MakeFriend项目依赖HelloFriend项目
依赖阻断(在被引用的项目中写):

可选依赖(在需要引用其他依赖的项目中写):

1.5 仓库
1.5.1 概念
Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
仓库的类型有:
本地(local)
中央(central)
远程(remote)