在 Maven 中跳过单元测试进行本地打包或排除某个项目进行打包

1. Maven 跳过单元测试

主要命令

1. 完全跳过测试

bash 复制代码
mvn clean package -DskipTests

2. 忽略失败的测试继续构建

bash 复制代码
mvn clean package -Dmaven.test.failure.ignore=true

参数说明

  • -DskipTests - 跳过执行测试,但仍会编译测试代码
  • -Dmaven.test.skip=true - 跳过测试并跳过测试代码编译
  • -Dmaven.test.failure.ignore=true - 执行测试但忽略测试失败,继续构建过程

推荐用法

对于本地快速打包,推荐使用:

bash 复制代码
mvn clean package -DskipTests

这个命令会:

  • 清理之前的构建结果
  • 编译主代码和测试代码
  • 但不执行任何测试
  • 完成打包过程

其他可选命令

如果同时想跳过集成测试:

bash 复制代码
mvn clean package -DskipTests -DskipITs

2. Maven 跳过或排除某个项目进行打包

多模块项目中的模块控制

1. 跳过特定模块构建

bash 复制代码
# 只构建指定模块
mvn clean install -pl module-name

# 构建多个指定模块
mvn clean install -pl module1,module2

# 构建指定模块及其依赖的模块
mvn clean install -pl module-name -am

# 构建指定模块及使用该模块的下游模块
mvn clean install -pl module-name -amd

2. 排除特定模块构建

bash 复制代码
# 排除指定模块
mvn clean install -pl !excluded-module

# 排除多个模块
mvn clean install -pl !module1,!module2

使用 Profile 控制构建

在 pom.xml 中配置 profile

xml 复制代码
<profiles>
    <profile>
        <id>exclude-some-modules</id>
        <modules>
            <module>module-a</module>
            <module>module-c</module>
            <!-- 不包含 module-b -->
        </modules>
    </profile>
</profiles>

跳过测试的组合命令

结合模块控制与测试跳过

bash 复制代码
# 排除模块并跳过测试
mvn clean package -pl !excluded-module -DskipTests

# 只构建特定模块并跳过测试
mvn clean install -pl com.ty:module-name -DskipTests

参数说明

  • -pl--projects - 指定要构建的模块列表
  • ! - 排除指定模块
  • -am--also-make - 同时构建依赖的模块
  • -amd--also-make-dependents - 同时构建依赖于指定模块的下游模块
  • -DskipTests - 跳过单元测试执行

实际应用示例

bash 复制代码
# 只构建核心服务模块
mvn clean install -pl vntg-core

# 排除测试模块构建
mvn clean install -pl !test-module

# 跳过测试并排除特定模块
mvn clean package -pl !integration-test -DskipTests

问题根源

这通常是由以下原因造成的:

  • 模块依赖版本不一致ows-web 模块可能依赖了旧版本的 vntg-core
  • Maven 缓存问题:本地缓存的依赖包版本过旧
  • 多模块构建顺序问题

推荐解决方案

1. 清理并重新构建
bash 复制代码
mvn clean compile -U
2. 强制更新依赖
bash 复制代码
mvn clean compile -U -Dmaven.repo.local=~/.m2/repository
3. 如果需要临时跳过 ows-web 模块
bash 复制代码
mvn clean compile -pl !web
4. 完整的多模块构建命令
bash 复制代码
mvn clean install -DskipTests -U

这个问题是因为 shell 将感叹号 ! 解释为历史命令的特殊字符导致的。以下是几种解决方案:

解决方案

1. 使用引号包围模块名称

bash 复制代码
mvn -T 4C clean package -pl '!web' -amd -Dmaven.test.skip=true -Ddeploy.env=dev

2. 转义感叹号

bash 复制代码
mvn -T 4C clean package -pl \!web -amd -Dmaven.test.skip=true -Ddeploy.env=dev

3. 使用双破折号参数格式

bash 复制代码
mvn -T 4C clean package --projects '!web' -amd -Dmaven.test.skip=true -Ddeploy.env=dev

4. 只构建其他模块

如果项目有明确的模块列表,可以指定构建其他模块:

bash 复制代码
# 假设有其他模块如 core、service 等
mvn -T 4C clean package -pl core,service -Dmaven.test.skip=true -Ddeploy.env=dev

推荐命令

bash 复制代码
mvn -T 4C clean package -pl '!web' -amd -Dmaven.test.skip=true -Ddeploy.env=dev

这样就能成功排除 web 模块进行构建,同时避免 shell 解析 ! 字符的问题。

最终建议

优先解决依赖版本一致性问题,而不是跳过模块构建,以确保代码完整性。

相关推荐
fb_123451 天前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
码智社1 天前
JSON 零基础到资深全体系教程
java·json
wgego1 天前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
机建狂魔1 天前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex
山峰哥1 天前
数据库工程与SQL调优:从慢查询到秒级响应的实战之路
java·开发语言·数据库·sql·深度优先·启发式算法
乐观的Terry1 天前
11、发布系统-用户认证与权限体系
java·spring boot·spring·spring cloud·mybatis
前端开发张小七1 天前
Java 学习笔记 · 第二课:面向对象核心(封装、继承、多态)及接口与异常
java·后端·程序员
wangjialelele1 天前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化
孙启超1 天前
【AI应用开发】LangChain 中 Chain 和 Agent 核心区别?
java·人工智能·langchain·llm·rag·ai应用开发·agent loop
leoZ2311 天前
实战复盘:用 Claude Code 从零搭一个 GitHub PR 统计工具
java·人工智能·python·深度学习·自然语言处理·github·llama