【问题标题】:EasyMock tests failing with java.lang.NoClassDefFoundError org.easymock.internal.ClassProxyFactory$2 on Java 17EasyMock 测试在 Java 17 上因 java.lang.NoClassDefFoundError org.easymock.internal.ClassProxyFactory$2 失败
【发布时间】:2022-11-06 17:53:18
【问题描述】:

由于升级到 Java 17,我使用 EasyMock 的单元测试失败并出现以下异常

java.lang.NoClassDefFoundError:无法初始化类 org.easymock.internal.ClassProxyFactory$2 在 org.easymock.internal.ClassProxyFactory.createEnhancer(ClassProxyFactory.java:233) 在 org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:165) 在 org.easymock.internal.MocksControl.createMock(MocksControl.java:107) 在 org.easymock.internal.MocksControl.createMock(MocksControl.java:80) 在 org.easymock.EasyMockSupport.mock(EasyMockSupport.java:77) 在 org.easymock.EasyMockSupport.createMock(EasyMockSupport.java:364)

我正在使用 maven-surefire-plugin 运行测试。

【问题讨论】:

    标签: easymock java-17


    【解决方案1】:

    更新:从EasyMock 5.0.0 add-opens 起不再需要。

    问题 #274 和 #300 已在版本 5.0.0 中得到解决。

    所以升级到 EasyMock 版本 5 解决了这个问题。


    Java 17 包含JEP 403 which strongly encapsulates JDK Internals。

    由于 EasyMock 使用其中一些内部 API,因此需要通过设置命令行选项 add-opens 来访问这些 API

    如果您必须允许类路径上的代码对 访问非公共成员,然后使用 --add-opens 运行时选项。

    https://docs.oracle.com/javase/9/migrate/toc.htm

    正如this EasyMock issue中指出的那样

    你需要在命令行中打开那个包

    所以要修复异常 add-opens 需要为 maven-surefire-plugin 设置为 argLine

    <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        ...
        <configuration>
            <argLine>
                --add-opens java.base/java.lang=ALL-UNNAMED
            </argLine>
        </configuration>
    </plugin>
    

    【讨论】:

    • 答案是正确的。我仍然需要发布完整的 Java 17 支持。代码几乎准备好了,但感谢任何帮助。
    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2017-05-21
    • 2019-06-23
    • 2021-11-09
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多