You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins执行maven-cucumber-reporting报错缺失ArrayUtils类问题

根因分析

这个问题和你项目里声明的commons-lang3依赖没关系——Maven插件运行时用独立的类加载器(就是报错里的plugin realm),默认只加载插件自身的依赖,不会读取项目<dependencies>下声明的包,你在项目里配的commons-lang3是给测试代码用的,插件根本访问不到。
看报错里打印的插件类路径就很清楚:插件运行时只加载了3个jar,完全没有commons-lang3,所以才会抛org.apache.commons.lang3.ArrayUtils找不到的错误。
本地能跑通是因为你本地用Maven 3.8.3,联网状态下会自动拉取插件缺失的传递依赖;Jenkins是离线环境,你之前同步依赖的时候大概率只同步了项目代码需要的依赖,漏了maven-cucumber-reporting插件自身的传递依赖,再加上Jenkins装的Maven 3.3.9是2015年的老版本,本身和你用的高版本构建插件、测试组件存在兼容问题,才会出现本地正常、Jenkins报错的差异。

排查步骤
  • 先查Jenkins上Maven仓库里org/apache/commons/commons-lang3/路径下的jar包是否完整,有没有损坏、大小为0、校验和不匹配的问题。
  • 查net/masterthought/maven-cucumber-reporting/5.7.0/目录下的pom文件,确认它声明的commons-lang3依赖版本,再去仓库对应路径检查包是否存在。
  • 确认你之前同步依赖的时候,有没有过滤掉插件目录(比如org/apache/maven、net/masterthought这类路径)的文件,很多人同步离线仓库只会同步项目依赖的普通jar,漏了构建插件的传递依赖。
解决方案

最快修复方案

直接在maven-cucumber-reporting插件的配置里,显式把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>${commons-lang3.version}</version>
        </dependency>
    </dependencies>
    <executions>
        <!-- 原有execution配置保持不变即可 -->
        <execution>
            <id>generate-cucumber-reports</id>
            <phase>verify</phase>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <projectName>Automation report</projectName>
                <outputDirectory>${project.build.directory}/cucumber-reports</outputDirectory>
                <inputDirectory>${project.build.directory}/</inputDirectory>
                <jsonFiles>
                    <param>**/*.json</param>
                </jsonFiles>
                <checkBuildResult>false</checkBuildResult>
            </configuration>
        </execution>
    </executions>
</plugin>

确认Jenkins仓库里对应版本的commons-lang3包存在,重新构建就能过。

离线环境根治方案

把你本地能正常跑通构建的整个.m2/repository目录全量同步到Jenkins服务器,不要做任何路径过滤,尤其是构建插件相关的目录必须完整同步,不要只传项目依赖的普通jar。

版本兼容优化

把Jenkins上的Maven从3.3.9升级到和本地一致的3.8.x版本,避免因为Maven核心版本过老和新插件出现兼容问题,也能减少本地和CI环境版本差异导致的不一致问题。

注意

不用反复换项目里声明的commons-lang3版本,项目依赖和插件的类加载器是隔离的,改项目依赖版本根本影响不到插件运行时的类路径,纯做无用功。

内容的提问来源于stack exchange,提问作者Thomarkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:57:17