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

最终建议

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

相关推荐
weixin_462446232 小时前
Java 使用 Apache Batik 将 SVG 转换为 PNG(指定宽高)
java·apache·svg转png
移幻漂流2 小时前
Kotlin 完全取代 Java:一场渐进式的技术革命(技术、成本与综合评估)
java·开发语言·kotlin
WF_YL2 小时前
极光推送(JPush)快速上手教程(Java 后端 + 全平台适配)
java·开发语言
CHU7290352 小时前
智慧回收新体验:同城废品回收小程序的便捷功能探索
java·前端·人工智能·小程序·php
凯子坚持 c2 小时前
C++大模型SDK开发实录(二):DeepSeek模型接入、HTTP通信实现与GTest单元测试
c++·http·单元测试
派大鑫wink2 小时前
【Day42】SpringMVC 入门:DispatcherServlet 与请求映射
java·开发语言·mvc
大熊猫侯佩2 小时前
Swift 6.2 列传(第十八篇·大结局):冯衡的“过目不忘”与语言的圆满
单元测试·macro·test·evaluate·swift testing·swift 6.2·大结局
填满你的记忆2 小时前
【计算机网络·基础篇】TCP 的“三次握手”与“四次挥手”:后端面试的“生死线”
java·网络·网络协议·tcp/ip·计算机网络·面试
不吃鱼的羊2 小时前
单元测试基础
单元测试