今天在接手的项目中本想在测试类中跑一遍持久层的逻辑,但是测试类型项目启动就报错,报错信息如下:

Internal Error occurred.org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover testsat org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:111)at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:85)at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:92)at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:67)at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:48)at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)Caused by: org.junit.platform.commons.JUnitException: MethodSelector [className = 'com.kawa.job.manage.JobManageTest', methodName = 'test', methodParameterTypes = ''] resolution failedat org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener.selectorProcessed(AbortOnFailureLauncherDiscoveryListener.java:39)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:102)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:82)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113)at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:45)at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69)at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:103)... 7 moreCaused by: java.lang.UnsupportedClassVersionError: org/springframework/test/context/BootstrapWith has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0at java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:763)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)at java.net.URLClassLoader.access$100(URLClassLoader.java:73)at java.net.URLClassLoader$1.run(URLClassLoader.java:368)at java.net.URLClassLoader$1.run(URLClassLoader.java:362)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:361)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:348)at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114)at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:439)at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:241)at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)at sun.reflect.annotation.AnnotationParser.parseSelectAnnotations(AnnotationParser.java:101)at sun.reflect.annotation.AnnotationType.<init>(AnnotationType.java:145)at sun.reflect.annotation.AnnotationType.getInstance(AnnotationType.java:85)at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:266)at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)at java.lang.Class.createAnnotationData(Class.java:3521)at java.lang.Class.annotationData(Class.java:3510)at java.lang.Class.getDeclaredAnnotation(Class.java:3458)at org.junit.platform.commons.util.AnnotationUtils.findAnnotation(AnnotationUtils.java:128)at org.junit.platform.commons.util.AnnotationUtils.findAnnotation(AnnotationUtils.java:115)at org.junit.jupiter.engine.descriptor.DisplayNameUtils.determineDisplayName(DisplayNameUtils.java:68)at org.junit.jupiter.engine.descriptor.JupiterTestDescriptor.<init>(JupiterTestDescriptor.java:69)at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.<init>(ClassBasedTestDescriptor.java:94)at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.<init>(ClassTestDescriptor.java:51)at org.junit.jupiter.engine.discovery.ClassSelectorResolver.newClassTestDescriptor(ClassSelectorResolver.java:119)at org.junit.jupiter.engine.discovery.ClassSelectorResolver.lambda$resolve$0(ClassSelectorResolver.java:71)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$DefaultContext.createAndAdd(EngineDiscoveryRequestResolution.java:246)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$DefaultContext.addToParent(EngineDiscoveryRequestResolution.java:209)at org.junit.jupiter.engine.discovery.ClassSelectorResolver.resolve(ClassSelectorResolver.java:71)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:134)at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359)at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:185)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:125)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.access$100(EngineDiscoveryRequestResolution.java:57)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$DefaultContext.resolve(EngineDiscoveryRequestResolution.java:224)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$DefaultContext.addToParent(EngineDiscoveryRequestResolution.java:218)at org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType.resolve(MethodSelectorResolver.java:187)at org.junit.jupiter.engine.discovery.MethodSelectorResolver$MethodType.access$300(MethodSelectorResolver.java:143)at org.junit.jupiter.engine.discovery.MethodSelectorResolver.lambda$resolve$0(MethodSelectorResolver.java:89)at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)at org.junit.jupiter.engine.discovery.MethodSelectorResolver.resolve(MethodSelectorResolver.java:93)at org.junit.jupiter.engine.discovery.MethodSelectorResolver.resolve(MethodSelectorResolver.java:73)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:146)at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359)at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:185)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:125)at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:91)... 12 more

仔细检查之后发现pom.xml中不仅添加了spring-boot-starter-test依赖,还添加了spring-test依赖,将spring-test注释掉之后项目启动成功,猜测原因可能是项目启动先执行的是spring-test依赖解析,看过spring-test的实现就知道没有里面没有junit-jupiter.spring-test内容如下:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><!-- This module was also published with a richer model, Gradle metadata,--><!-- which should be used instead. Do not delete the following line which--><!-- is to indicate to Gradle or any Gradle module metadata file consumer--><!-- that they should prefer consuming it instead. --><!-- do_not_remove: published-with-gradle-metadata --><modelVersion>4.0.0</modelVersion><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>6.0.3</version><name>Spring TestContext Framework</name><description>Spring TestContext Framework</description><url>https://github.com/spring-projects/spring-framework</url><organization><name>Spring IO</name><url>https://spring.io/projects/spring-framework</url></organization><licenses><license><name>Apache License, Version 2.0</name><url>https://www.apache.org/licenses/LICENSE-2.0</url><distribution>repo</distribution></license></licenses><developers><developer><id>jhoeller</id><name>Juergen Hoeller</name><email>jhoeller@pivotal.io</email></developer></developers><scm><connection>scm:git:git://github.com/spring-projects/spring-framework</connection><developerConnection>scm:git:git://github.com/spring-projects/spring-framework</developerConnection><url>https://github.com/spring-projects/spring-framework</url></scm><issueManagement><system>GitHub</system><url>https://github.com/spring-projects/spring-framework/issues</url></issueManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>6.0.3</version><scope>compile</scope></dependency></dependencies></project>