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 解析 ! 字符的问题。
最终建议
优先解决依赖版本一致性问题,而不是跳过模块构建,以确保代码完整性。