Java TypeNotPresentExceptionProxy

Java TypeNotPresentExceptionProxy,java,maven,exception,junit,surefire,Java,Maven,Exception,Junit,Surefire,从Surefire 2.6升级到Surefire 2.13时,我在运行单元测试时会得到一个TypeNotPresentExceptionProxy java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:653)

从Surefire 2.6升级到Surefire 2.13时,我在运行单元测试时会得到一个
TypeNotPresentExceptionProxy

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
    at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:653)
    at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:460)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
    at java.lang.Class.initAnnotationsIfNecessary(Class.java:3070)
    at java.lang.Class.getAnnotation(Class.java:3029)
    at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.isValidJUnit4Test(JUnit4TestChecker.java:64)
在JUnit4TestChecker中,第64行如下所示:

Annotation runWithAnnotation=testClass.getAnnotation(runWith);
因此,Surefire检查
@RunWith
注释以确保其类型有效。我们的测试使用Spring,因此在我们的测试类中,
@RunWith
看起来像这样:

@RunWith(SpringJUnit4ClassRunner.class)
似乎Surefire没有找到
SpringJUnit4ClassRunner
类。我不知道为什么,因为在SureFire2.6下,测试运行良好


有什么想法吗?

运行mvn依赖项:解决

排除任何可能侵入的JUnit 3.x版本


确保没有TestNG依赖项,如果有,它将加载TestNG注释,而不是您需要的JUnit注释。

听起来像个bug。如果还没有,请创建一个。谢谢您的输入。我将尝试创建一个新的、更简单的项目来演示相同的问题。然后打开一个bug报告。您是否检查了较新的版本,因为我们现在是2.18.1?请发布您正在使用的Java、Maven和Spring的版本,以及您的
Maven surefire插件的配置。
。在我看来,它的运行方式好像找不到。是否有可能在同一个类加载器中运行两个版本的Surefire?您的某个依赖项是否正在加载其他版本?这看起来很像您在尝试加载同一类的两个不同版本时可能遇到的问题。