侧边栏壁纸
  • 累计撰写 111 篇文章
  • 累计创建 48 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

Maven 使用笔记

勤为径苦作舟
2025-12-24 / 0 评论 / 0 点赞 / 10 阅读 / 0 字

简介

在 Java 开发的日常中,Maven 不仅仅是一个包管理工具,更是一个强大的构建系统。

批量运行指定包下的测试用例

在重构或新增功能时,我们往往只想运行某个特定包下的所有单元测试,而不是全量跑一遍。

命令:

mvn clean test -Dtest='top.csaf.junit.**' -Dsurefire.failIfNoSpecifiedTests=false

解析:

  • mvn clean test: 标准的 Maven 生命周期。clean 清理 target 目录,确保环境纯净;test 运行测试阶段。
  • -Dtest='top.csaf.junit.**': 这是 Maven Surefire Plugin 的核心参数。
    • top.csaf.junit:指定基础包名。
    • **:这是一个通配符,表示递归匹配该包及其所有子包下的所有测试类。
    • 注:如果是 * 则只匹配当前包下的类,不包含子包。
  • -Dsurefire.failIfNoSpecifiedTests=false: 这是一个非常实用的容错参数。
    • 默认情况下,如果你指定的模式没有匹配到任何测试类,Maven 会报错并停止构建。
    • 设置为 false 后,即使没有找到匹配的测试(例如某个子模块下刚好没有这个包),构建也会显示“成功”并跳过,非常适合在多模块项目中批量执行。

多模块项目:单模块测试与覆盖率报告

在大型多模块(Multi-module)项目中,修改了某个底层模块(如 zutil-http),我们希望只测试这个模块并生成 JaCoCo 覆盖率报告,同时确保其依赖也被正确编译。

命令:

mvn test -pl zutil-http -am -Dtest=HttpUtilTest -Dsurefire.failIfNoSpecifiedTests=false && mvn jacoco:report -pl zutil-http

解析:

这条命令由两部分组成,中间用 && 连接,意味着只有前半部分成功(测试通过),才会执行后半部分(生成报告)。

第一部分:编译与测试

  • -pl zutil-http (--projects): 指定本次构建的目标模块列表。这里只构建 zutil-http 模块。
  • -am (--also-make): 关键参数。同时构建指定模块所依赖的其他模块。这保证了如果 zutil-http 依赖了 zutil-core,Maven 会先编译 zutil-core,防止因找不到依赖而报错。
  • -Dtest=HttpUtilTest: 精确指定运行某一个测试类 HttpUtilTest
  • -Dsurefire.failIfNoSpecifiedTests=false: 同上,防止因未找到测试而报错。

第二部分:生成报告

  • mvn jacoco:report: 调用 JaCoCo 插件生成代码覆盖率报告(通常生成在 target/site/jacoco/index.html)。
  • -pl zutil-http: 同样指定只为该模块生成报告。

一键升级依赖与插件版本(过滤不稳定版本)

项目维护久了,pom.xml 中的依赖版本往往会滞后。使用 versions-maven-plugin 可以自动化升级过程,同时我们可以通过正则过滤掉 alpha、beta 等不稳定版本。

命令:

mvn versions:use-latest-releases versions:update-properties -DgenerateBackupPoms=false -Dmaven.version.ignore=".*(?i)(alpha|beta|android).*"

解析:

  • versions:use-latest-releases: 尝试将 <dependencies> 中的依赖升级到最新的 Release 版本。
  • versions:update-properties: 尝试更新 <properties> 标签中定义的版本号。这是管理插件版本和统一依赖版本的最佳实践。
  • -DgenerateBackupPoms=false: 默认情况下,该插件会生成 pom.xml.versionsBackup 备份文件。设置为 false 表示直接修改原 pom.xml,保持工作区整洁(反正我们有 Git)。
  • -Dmaven.version.ignore=".*(?i)(alpha|beta|android).*": 核心过滤参数
    • 这是一个正则表达式,用于忽略不需要的版本。
    • (?i):开启不区分大小写模式。
    • (alpha|beta|android):匹配包含这些关键词的版本号。
    • 效果:Maven 在搜索最新版本时,会自动跳过 2.0.0-beta11.5.0-alpha 这种非正式版本,只选择正式发行的 Release 版本。
0

评论区