提问者:小点点

将 LogManager (l4j2) 与 Java 8 配合使用时出错(java.lang.reflect.AnnotatedElement 无法解析)


我刚刚在将我的一个新项目的 JDK 版本从 7u45 切换到 8u20 时遇到了一个奇怪的错误。我的课程开始时的无害 LogManager 声明被拒绝,并显示以下错误:

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

这是代码:

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

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

将 JDK 与版本 7 一起使用,一切正常。


共3个答案

匿名用户

使用 JDK 时

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

有时,当旧编译器忽略类文件的较新版本号时,您可以侥幸逃脱。但是某些类型会混淆旧的类文件解析器,因为它们使用新功能,特别是AnnotatedElement,它现在有默认方法,以及Map.Entry,一个现在有静态方法的接口

似乎 Eclipse 在找不到类文件的引用和在说“无法解析”时无法读取的类文件之间没有区别。

这同样适用于使用 ECJ 作为嵌入式编译器的所有工具和框架。

匿名用户

如果在 Eclipse 中运行的 Tomcat 中发生这种情况(问题已作为重复关闭并重定向到此处),请转到首选项→服务器→运行时环境→ Tomcat 版本→编辑...并确保所选的 JRE 与 Tomcat 版本匹配。(也许你需要安装一个。

匿名用户

解决方案 1:

尝试更改源级别。

  1. 转到项目

解决方案 2:

  1. 创建新工作区。
  2. 将项目文件复制到新工作区中。
  3. 将项目导入 eclipse 并重建。