我刚刚在将我的一个新项目的 JDK 版本从 7u45 切换到 8u20 时遇到了一个奇怪的错误。我的课程开始时的无害 LogManager 声明被拒绝,并显示以下错误:
无法解析 java.lang.reflect.AnnotatedElement 类型。它从所需的.class文件中间接引用
这是代码:
public class Class1 {
private static Logger log = LogManager.getLogger(Class1.class);
...
Eclipse 建议我配置构建路径,但我不知道要配置什么,因为我不知道该错误的根本问题。
将 JDK 与版本 7 一起使用,一切正常。
使用 JDK 时
原因是编译器必须能够加载 JRE 的较新类文件,以便编译引用这些类的软件。
有时,当旧编译器忽略类文件的较新版本号时,您可以侥幸逃脱。但是某些类型会混淆旧的类文件解析器,因为它们使用新功能,特别是AnnotatedElement
,它现在有默认
方法,以及Map.Entry
,一个现在有静态
方法的接口
。
似乎 Eclipse 在找不到类文件的引用和在说“无法解析”时无法读取的类文件之间没有区别。
这同样适用于使用 ECJ 作为嵌入式编译器的所有工具和框架。
如果在 Eclipse 中运行的 Tomcat 中发生这种情况(问题已作为重复关闭并重定向到此处),请转到首选项→服务器→运行时环境→ Tomcat 版本→编辑...并确保所选的 JRE 与 Tomcat 版本匹配。(也许你需要安装一个。
解决方案 1:
尝试更改源级别。
解决方案 2: