Jenkins构建Maven项目报错缺失org/apache/commons/lang3/ArrayUtils类
根因分析
这个报错本质是Maven插件类加载隔离+插件本身依赖声明缺失导致的:
- Maven执行插件时使用独立的SelfFirstStrategy类加载器,和项目本身的依赖类路径完全隔离——你在项目
<dependencies>节点下声明的commons-lang3是供业务/测试代码使用的,插件运行时读不到这个包。 - 从错误日志打印的插件类路径可以看到,
maven-cucumber-reporting:5.7.0运行时只加载了3个jar包,没有commons-lang3:这是该版本插件的已知bug,它内部调用了org.apache.commons.lang3.ArrayUtils类,却没有在插件自身的POM中声明对commons-lang3的依赖,导致Maven拉取插件时不会自动下载这个依赖包。 - 本地环境运行正常是因为本地Maven缓存中存在其他插件引入的commons-lang3包,类加载时碰巧能命中;Jenkins环境的Maven仓库缓存更干净,类路径下找不到对应类就直接报错。
- 执行
mvn dependency:tree看不到commons-lang3和插件的关联是正常的:这个命令默认只解析项目主代码/测试代码的依赖树,不会包含Maven插件自身的依赖。
修复方案
二选一即可:
- 方案1(推荐):直接升级插件版本,5.7.1及以上版本官方已经修复了这个依赖遗漏问题,只需要修改properties中的版本号:
<maven-cucumber-reporting.version>5.7.1</maven-cucumber-reporting.version>
- 方案2:如果暂时不能升级插件版本,就在插件声明节点下显式补加commons-lang3依赖,强制插件加载这个包:
<plugin> <groupId>net.masterthought</groupId> <artifactId>maven-cucumber-reporting</artifactId> <version>${maven-cucumber-reporting.version}</version> <!-- 新增以下依赖配置 --> <dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> </dependencies> <executions> <!-- 原有executions配置保持不变 --> </executions> </plugin>
修改完成后,在Jenkins构建步骤中先执行mvn dependency:resolve-plugins确认所有插件依赖拉取完整,再执行原构建命令即可恢复正常。
内容的提问来源于stack exchange,提问作者Thomarkey
相关产品推荐
相关产品推荐

