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

Maven项目安装失败:Jacoco相关测试报错求助

解决Maven Surefire + Jacoco测试失败:java.lang.NoSuchFieldException: $jacocoAccess

根据你描述的报错信息,这个问题几乎可以确定是Jacoco版本与JDK版本不兼容或者Jacoco与Surefire插件的配合配置存在冲突导致的——毕竟你提到在其他电脑能正常运行,说明代码本身没问题。下面是几个针对性的解决方案,按优先级尝试:

1. 升级Jacoco到兼容当前JDK的版本

从报错里的org.jacoco.agent.rt.internal_c13123e来看,你的Jacoco版本可能比较旧,而JDK9+的模块系统会限制对核心类(比如java.lang.UnknownError)的instrument操作。建议升级到Jacoco 0.8.7及以上版本(这个版本开始更好地支持JDK11+)。

在你的pom.xml中更新Jacoco插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.11</version> <!-- 最新稳定版,兼容JDK8-JDK21 -->
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2. 调整Surefire插件的fork模式配置

有时候Surefire的fork配置会影响Jacoco agent的加载,尝试显式设置fork模式为always,确保每个测试用例都在独立的JVM中运行,避免类加载冲突:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M7</version> <!-- 同步升级到较新版本,兼容Jacoco -->
    <configuration>
        <forkCount>1</forkCount>
        <reuseForks>false</reuseForks>
    </configuration>
</plugin>

3. 清理Maven缓存并重新构建

本地Maven仓库的依赖可能损坏或版本不一致,执行以下命令清理缓存并重新下载依赖:

mvn clean install -U

-U参数会强制更新快照依赖,确保你拿到的是正确版本的Jacoco和Surefire插件。

4. 确认JDK版本与其他电脑一致

检查本地JDK版本是否和其他能正常运行的电脑相同:

java -version
mvn -v # 确认Maven实际使用的JDK版本

如果本地用的是JDK17而其他电脑是JDK11,可能会出现这类兼容性问题,建议切换到一致的JDK版本。

5. 排除系统类的Jacoco Instrumentation

如果上面的方法都不行,可以尝试让Jacoco跳过对java.lang包下类的instrument操作,避免触发核心类的访问限制:

在Jacoco插件配置中添加排除规则:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.11</version>
    <configuration>
        <excludes>
            <exclude>java/lang/**</exclude>
        </excludes>
    </configuration>
    <!-- 保留之前的executions配置 -->
</plugin>

这些方案应该能解决你遇到的问题,毕竟核心冲突就是Jacoco和JDK/Surefire的兼容性问题,按顺序尝试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:52:47