菜鸟科技网

命令构建maven项目

Maven 的三个生命周期

在深入命令之前,你需要理解 Maven 的三个核心生命周期,当你执行一个命令时,Maven 实际上是在运行一个或多个生命周期阶段。

命令构建maven项目-图1
(图片来源网络,侵删)
  1. default (默认) 生命周期: 这是最常用的生命周期,用于处理项目的源代码、编译、测试、打包、部署等,我们接下来介绍的大部分命令都属于这个生命周期。

    • validate: 检查项目是否正确。
    • compile: 编译项目的源代码。
    • test: 运行单元测试。
    • package: 打包项目,生成 JAR 或 WAR 文件。
    • verify: 运行集成测试,检查包是否有效。
    • install: 将包安装到本地 Maven 仓库,供其他项目引用。
    • deploy: 将最终的包部署到远程仓库,供其他开发者使用。
  2. clean 生命周期: 用于清理项目,它会删除之前构建生成的所有文件(如 target 目录)。

    • clean: 清理 target 目录。
  3. site 生命周期: 用于生成项目文档站点。

    • site: 生成项目站点。

重要提示: Maven 的生命周期是阶段化的,当你运行一个阶段时,它会自动执行该阶段之前的所有阶段。 当你运行 mvn package 时,Maven 会按顺序自动执行 validate, compile, test,最后才是 package

命令构建maven项目-图2
(图片来源网络,侵删)

前提条件

在开始之前,请确保你的系统已经安装并配置好了以下环境:

  1. Java Development Kit (JDK): Maven 是用 Java 写的,所以需要 JDK,推荐使用 JDK 8 或更高版本。
  2. Maven: 已安装 Maven 并将其 bin 目录添加到系统的 PATH 环境变量中。

验证安装: 打开终端或命令提示符,输入以下命令:

java -version
mvn -version

如果都显示版本信息,说明环境配置正确。


常用 Maven 构建命令

假设你的项目根目录下有一个 pom.xml 文件。

命令构建maven项目-图3
(图片来源网络,侵删)

创建新项目

这是构建的第一步,Maven 提供了一个强大的 archetype 插件来快速生成项目骨架。

# 创建一个简单的 Java 应用项目
# -DgroupId: 组织 ID,通常为域名的倒序
# -DartifactId: 项目名称
# -DarchetypeArtifactId: 使用哪种项目模板
# -DinteractiveMode: 是否交互式(设为 false 可自动填写)
mvn archetype:generate -DgroupId=com.example -DartifactId=my-first-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

执行后,Maven 会在当前目录下创建一个名为 my-first-app 的新项目文件夹,其中包含了标准的目录结构和 pom.xml 文件。

清理项目

在每次新的构建之前,最好先清理一下,确保是“干净”的构建。

# 执行 clean 生命周期
mvn clean

效果: 删除项目根目录下的 target 文件夹及其所有内容。

编译项目

src/main/java 目录下的 Java 源代码编译成 .class 文件,并存放在 target/classes 目录中。

# 执行 compile 阶段
mvn compile

效果: 生成 target/classes 目录。

运行测试

编译并运行 src/test/java 目录下的单元测试。

# 执行 test 阶段
mvn test

效果: 编译代码,运行所有测试,并在 target/surefire-reports 目录中生成测试报告。

打包项目

编译代码、运行测试,然后将项目打包成一个可分发的文件(通常是 JAR 或 WAR)。

# 执行 package 阶段
mvn package

效果: 在 target 目录下生成最终的包文件,my-first-app-1.0-SNAPSHOT.jar

安装项目到本地仓库

将打包好的 JAR 文件安装到你本地的 Maven 仓库中(通常是 ~/.m2/repository),这样,你电脑上的其他 Maven 项目就可以直接引用这个项目,而无需从远程仓库下载。

# 执行 install 阶段
mvn install

效果: 完成编译、测试、打包,并将最终的 JAR 文件复制到你的本地 Maven 仓库。

跳过测试

在某些情况下(在持续集成环境中快速构建),你可能想跳过测试以节省时间。

# 方法一:在命令后添加 -DskipTests
mvn package -DskipTests
# 方法二:使用更严格的 -Dmaven.test.skip=true (会跳过编译和运行测试)
mvn package -Dmaven.test.skip=true

推荐使用 -DskipTests,因为它仍然会编译测试代码,只是不运行它们,这有助于发现代码中的编译错误。

跳过清理

默认情况下,mvn install 会先执行 clean,如果你知道 target 目录是干净的,可以跳过这一步以加快速度。

# 使用 -- 或 ! 来跳过生命周期
mvn install --!
# 或者
mvn !clean install

编译测试代码

如果你想只编译测试代码而不运行它们。

mvn test-compile

生成项目站点

根据 pom.xml 中的信息和代码注释,生成项目文档。

mvn site

效果: 在 target/site 目录下生成一个包含项目报告、依赖信息等内容的 HTML 网站。


完整的构建工作流

一个完整的、标准的构建流程如下:

# 1. 清理之前的构建
mvn clean
# 2. 编译、测试、打包,并安装到本地仓库
mvn install

这个命令组合会确保你的项目从一个干净的状态开始,经过完整的验证流程,最终成为一个可供本地其他项目使用的组件。


高级选项和常见场景

指定 Maven 配置文件

Maven 允许你根据不同的环境(开发、测试、生产)定义不同的配置(如数据库连接、依赖版本等),这些配置在 pom.xml 中通过 <profiles> 定义。

# 构建时激活名为 "production" 的 profile
mvn clean install -P production

查看依赖树

当你想查看项目引入的所有依赖及其传递依赖时,这个命令非常有用。

mvn dependency:tree

效果: 在控制台打印出项目的完整依赖树。

下载源码和 Javadoc

在 IDE(如 IntelliJ IDEA 或 Eclipse)中查看源码和 Javadoc 会非常方便,你可以通过 Maven 命令提前下载它们。

# 下载所有依赖的源码
mvn dependency:sources
# 下载所有依赖的 Javadoc
mvn dependency:resolve -Dclassifier=javadoc

使用自定义的 settings.xml

如果你的 Maven 配置(如远程仓库、认证信息)存储在非默认位置的 settings.xml 文件中,可以这样指定:

mvn clean install -s /path/to/your/custom-settings.xml

强制更新依赖

有时,依赖仓库中的版本更新了,但本地缓存的还是旧版本,可以使用 -U 参数强制 Maven 检查并更新所有依赖。

mvn clean install -U

常见问题排查

mvn command not found

  • 原因: Maven 的 bin 目录没有添加到系统的 PATH 环境变量中。
  • 解决: 根据你的操作系统(Windows, macOS, Linux)正确配置 PATH 环境变量,然后重新打开终端。

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project my-first-app: Compilation failure

  • 原因: 代码中有语法错误。
  • 解决: 根据错误提示信息,找到并修复 src/main/java 目录下对应的 Java 文件中的代码问题。

Could not resolve dependencies for project ...

  • 原因:
    1. 网络问题,无法连接到 Maven 中央仓库或其他远程仓库。
    2. pom.xml 中的依赖坐标(groupId, artifactId, version)写错。
    3. 公司使用了私有代理仓库,但配置不正确。
  • 解决:
    1. 检查网络连接。
    2. 仔细核对 pom.xml 中的依赖信息。
    3. 检查 ~/.m2/settings.xml 文件中的仓库配置。
命令 描述 执行的生命周期阶段
mvn archetype:generate 创建新项目 Archetype
mvn clean 清理 target 目录 clean
mvn compile 编译源代码 validate, compile
mvn test 编译并运行测试 validate, compile, test
mvn package 打包项目(生成 JAR/WAR) validate, compile, test, package
mvn install 安装到本地仓库 validate, compile, test, package, install
mvn deploy 部署到远程仓库 ...package, install, deploy
mvn site 生成项目站点 site
mvn clean install 最常用的完整构建流程 clean, default (直到 install)

熟练掌握这些命令,将极大地提高你的 Java 项目开发效率,祝你编码愉快!

分享:
扫描分享到社交APP
上一篇
下一篇