Spring抛出UnsupportedClassVersionError

编程

一、背景介绍

公司的旧项目今年要微服务化,最近在帮业务部门做demo验证,旧项目用的JDK7,且在JDK8下会出现奇怪的编译问题。而我们新开发的服务是基于JDK8,两个项目之间通过dubbo接口进行调用。

然后今天业务部门的兄弟就找我反映了一个问题,说是项目用JDK7启动会报下边这个错

但是用JDK8就是好的,而JDK8又会有奇怪的编译问题,于是就只能JDK7编译、JDK8启动......希望我们能帮他们解决下。

二、问题原因及解决

暂时还没空写一个demo重现这个问题,先简单记录一下。

问题代码如下所示:

//ClassPathScanningCandidateComponentProvider.java

protected void registerDefaultFilters() {

this.includeFilters.add(new AnnotationTypeFilter(Component.class));

ClassLoader cl = ClassPathScanningCandidateComponentProvider.class.getClassLoader();

try {

this.includeFilters.add(new AnnotationTypeFilter(

((Class<? extends Annotation>) cl.loadClass("javax.annotation.ManagedBean")), false));

logger.info("JSR-250 "javax.annotation.ManagedBean" found and supported for component scanning");

}

catch (ClassNotFoundException ex) {

// JSR-250 1.1 API (as included in Java EE 6) not available - simply skip.

}

try {

this.includeFilters.add(new AnnotationTypeFilter(

((Class<? extends Annotation>) cl.loadClass("javax.inject.Named")), false));

logger.info("JSR-330 "javax.inject.Named" annotation found and supported for component scanning");

}

catch (ClassNotFoundException ex) {

// JSR-330 API not available - simply skip.

}

}

可以看到这里Spring尝试获取了javax.annotation.ManagedBean这个类,并加了try-catch,但是当引用的jar包中包含了JDK8编译的依赖时,这个报错就变成了UnsupportedClassVersionError。

想解决这个问题,要么就把jar包都换成用JDK7编译的,要么就想办法去掉那些包

以上是 Spring抛出UnsupportedClassVersionError 的全部内容, 来源链接: utcz.com/z/512564.html

回到顶部