Maven学习笔记
2025-1-19|2025-1-19
FollyCoolly
type
status
date
slug
summary
tags
category
icon
password
什么是Maven
Maven 是一种基于 Java 的项目构建、依赖管理和项目管理工具。它简化了开发过程中的重复任务,例如编译代码、运行测试、打包应用程序等,同时还提供了一种结构化的方式来管理项目的依赖和配置。
Maven出发点:希望有一种标准化的方式来构建项目,明确项目的组成部分,简化项目信息的发布,并在多个项目之间共享 JAR 文件。
Maven和Gradle的区别
特性 | Maven | Gradle |
配置文件格式 | XML (pom.xml) | Groovy 或 Kotlin 脚本 (build.gradle) |
构建生命周期 | 固定生命周期 | 灵活任务驱动 |
依赖管理 | 简单标准化 | 更灵活,支持多种仓库和解决冲突策略 |
性能 | 相对较慢 | 增量构建和并行任务,性能更好 |
插件系统 | 插件丰富,但较为固定 | 插件灵活,支持自定义 |
学习曲线 | 较浅 | 较陡,需掌握脚本和定制化配置 |
常用命令
POM
pom.xml 文件是 Maven 项目配置的核心。它是一个单一的配置文件,包含了构建项目所需的大部分信息。
示例
个人学习 java 主要是为了构建《CraftingInterpreter》中的 jlox。
以下是对应 POM 文件
1. 项目根元素:<project>
xmlns
:定义了默认命名空间,表示该文档的元素属于 Maven 的命名空间。
xmlns:xsi
:声明了一个前缀为xsi
的命名空间,用于指定 Schema 相关的属性。
xsi:schemaLocation
:提供命名空间和 Schema 文件的关联,用于验证 XML 结构。
命名空间的主要作用
- 避免命名冲突:确保不同来源的元素和属性能够共存。
- 提高可读性:通过前缀表明元素的来源。
- 支持扩展:允许在同一文档中引入多个命名空间,支持模块化设计。
- 验证与约束:结合 XML Schema 使用,可以验证命名空间中的元素和属性。
2. 模型版本:<modelVersion>
- 表示 POM 文件遵循的 Maven 模型版本。
4.0.0
是目前唯一支持的版本。
3. 项目信息
<groupId>
:项目组标识符,通常是反转的域名,表示组织或公司名称,例如com.zhsu
。
<artifactId>
:项目唯一标识符,通常是项目名称,例如lox
。
<version>
:项目版本号,1.0-SNAPSHOT
表示开发中的版本(快照版)。
4. 项目属性:<properties>
- 定义项目的常用属性,可在其他地方通过
${propertyName}
引用。 maven.compiler.source
和maven.compiler.target
:设置 Java 编译器的源代码版本和目标字节码版本(均为 Java 17)。project.build.sourceEncoding
:设置项目源码的编码格式(UTF-8)。
5. 构建配置:<build>
<build>
:配置项目的构建过程。
<plugins>
:定义构建过程中需要使用的插件。
(1) Maven Compiler Plugin
- 作用:控制项目的 Java 源代码编译。
- 关键配置项:
source
和target
:引用前面定义的 Java 版本属性,确保编译为 Java 17。
(2) Maven Exec Plugin
- 关键配置项:
mainClass
:指定项目的入口类(com.zhsu.lox.Lox
)。
(3) Maven Jar Plugin
- 作用:配置打包生成的 JAR 文件的行为。
- 关键配置项:
mainClass
:设置 JAR 文件的入口点,确保通过java -jar
命令运行时可以正确执行主类。
6. 依赖项:<dependencies>
- 定义项目所需的依赖库。在当前配置中,
<dependencies>
是空的,表示项目没有外部依赖。
Phase
在 Maven 中,phase(阶段) 是构建生命周期的一部分。Maven 的构建过程是由一系列预定义的阶段组成的,每个阶段对应一个特定的任务,例如编译、测试、打包等。通过执行某个阶段,Maven 会自动运行该阶段及其之前的所有阶段。
Maven 生命周期
Maven 有 3 个内置的生命周期:
- default(默认生命周期)用于构建项目,包含编译、测试、打包等常见任务。
- clean(清理生命周期)用于清理项目生成的临时文件和构建成果。
- site(站点生命周期)用于生成项目的站点文档。
生命周期的阶段
每个生命周期包含多个阶段,阶段按照特定顺序依次执行。
1. default 生命周期的阶段
以下是默认生命周期的主要阶段及其功能:
Phase | 描述 |
validate | 验证项目是否正确(如 pom.xml 是否合法,依赖是否存在)。 |
compile | 编译项目的源代码。 |
test | 运行单元测试,确保代码功能正常(需要测试框架,如 JUnit)。 |
package | 将编译的代码打包成分发格式(如 JAR 或 WAR 文件)。 |
verify | 运行集成测试,验证项目符合质量标准。 |
install | 将打包的项目安装到本地 Maven 仓库中,供其他项目使用。 |
deploy | 将打包的项目部署到远程 Maven 仓库,供团队共享使用。 |
mvn compile
会依次运行 validate 和 compile 阶段mvn pakage
会依次运行 validate、compile、test、package阶段2. clean 生命周期的阶段
用于清理构建过程中生成的文件。
Phase | 描述 |
pre-clean | 执行清理之前的操作。 |
clean | 删除构建产生的文件(通常是 target 目录)。 |
post-clean | 执行清理之后的操作。 |
3. site 生命周期的阶段
用于生成和发布项目站点。
Phase | 描述 |
pre-site | 执行生成站点之前的操作。 |
site | 生成项目站点文档。 |
post-site | 执行生成站点之后的操作,并对站点进行改进。 |
site-deploy | 将生成的站点部署到服务器或远程位置。 |
Loading...