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

最终建议

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

相关推荐
毕设源码李师姐1 分钟前
计算机毕设 java 基于 java 的图书馆借阅系统 智能图书馆借阅综合管理平台 基于 Java 的图书借阅与信息管理系统
java·开发语言·课程设计
忆~遂愿1 分钟前
Runtime 上下文管理:计算实例的生命周期、延迟最小化与上下文切换优化
java·大数据·开发语言·人工智能·docker
powerfulhell7 分钟前
寒假python作业5
java·前端·python
1尢晞17 分钟前
Java学习
java·开发语言
阿杰真不会敲代码10 分钟前
Mybatis-plus入门到精通
java·tomcat·mybatis
木井巳12 分钟前
【递归算法】二叉搜索树中第K小的元素
java·算法·leetcode·深度优先·剪枝
qq_2975746718 分钟前
【实战】POI 实现 Excel 多级表头导出(含合并单元格完整方案)
java·spring boot·后端·excel
星辰_mya21 分钟前
Elasticsearch线上问题之慢查询
java·开发语言·jvm
南极星100524 分钟前
我的创作纪念日--128天
java·python·opencv·职场和发展
郝学胜-神的一滴30 分钟前
超越Spring的Summer(一): PackageScanner 类实现原理详解
java·服务器·开发语言·后端·spring·软件构建