在 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 解析 ! 字符的问题。

最终建议

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

相关推荐
天空鸟_时光不老4 小时前
13-亮点提炼:把技术说辞翻译成业务价值
java·spring boot·spring·spring cloud·mybatis
小蒜学长4 小时前
基于SpringBoot+Vue的租房管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·租房管理
C++ 老炮儿的技术栈4 小时前
char (*csConnectName)[256]; 和 char csConnectName [256] 有什么区别
java·c语言·开发语言·c++·人工智能·算法·c
洋就在江州4 小时前
gitlab-cicd 离线集成——springboot-cicd (非docker形式,shell形式)
java·spring boot·后端·ci/cd·gitlab·gitlab-runner
CEZ4 小时前
JeeWMS 开源 WMS 全景导览:一套 Java 仓库管理系统从单据流到代码入口的阅读地图
java·开源
Nebula_g4 小时前
JavaSE加强:线程Thread(线程安全重点)
java·开发语言·jvm·算法·javase·技术栈
令狐少侠20114 小时前
centos7 下,使用docker 部署IOT 调试平台,ThingsBoard 并完美启动
java·spring boot·iot
JAVA面经实录9174 小时前
Java高级后端 · 全套面试通关手册(线上故障排查)
java·jvm·面试
IT_Octopus4 小时前
【零基础入门 LLM 开发 · Day 11】:ChatOpenAI vs init_chat_model——一行换供应商
java·前端·javascript
Wang's Blog4 小时前
Java 中间件之 RabbitMQ 快速入门: MQ 常见技术选型对比
java·中间件·java-rabbitmq