Maven学习笔记

2025-1-19|2025-1-19
FollyCoolly
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.sourcemaven.compiler.target:设置 Java 编译器的源代码版本和目标字节码版本(均为 Java 17)。
    • project.build.sourceEncoding:设置项目源码的编码格式(UTF-8)。

5. 构建配置:<build>

  • <build>:配置项目的构建过程。
  • <plugins>:定义构建过程中需要使用的插件。
(1) Maven Compiler Plugin
  • 作用:控制项目的 Java 源代码编译。
  • 关键配置项
    • sourcetarget:引用前面定义的 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 个内置的生命周期:
  1. default(默认生命周期)用于构建项目,包含编译、测试、打包等常见任务。
  1. clean(清理生命周期)用于清理项目生成的临时文件和构建成果。
  1. 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
将生成的站点部署到服务器或远程位置。
 
2025年的一些FLAG博客搭建过程中的那些问题
Loading...