我将我的新项目的JDK版本从7u45切换到8u20时遇到一个奇怪的错误。在类的开头,无害的LogManager声明被拒绝,并出现以下错误:


  无法解析类型java.lang.reflect.AnnotatedElement。从所需的.class文件间接引用它


这是代码:

public class Class1 {
    private static Logger log = LogManager.getLogger(Class1.class);
    ...


Eclipse建议我配置构建路径,但是我不知道要配置什么,因为我不知道该错误的根本问题。

使用版本7的JDK,一切正常。

最佳答案

当将JDK 8和IDE(或其他任何代码处理工具/框架)与自己的编译器一起使用时(例如Eclipse),即使您没有使用Java 8的更新功能,也必须将工具更新为支持Java 8的版本。 。

原因是编译器必须能够加载JRE的较新的类文件才能编译引用这些类的软件。

有时,如果您忽略了类文件的较新版本号,则可以使用较旧的编译器。但是某些类型会因为使用新功能而使较旧的类文件解析器感到困惑,特别是AnnotatedElement(现在具有default方法)和Map.Entry(现在具有interface方法)的。

似乎Eclipse在没有找到类文件的引用和说“无法解析”
这同样适用于所有使用ECJ作为嵌入式编译器的工具和框架。

10-07 19:31
查看更多