当前位置: 首页 > 面试题库 >

在Java 8中使用LogManager(l4j2)时出错(无法解析java.lang.reflect.AnnotatedElement)

殷安顺
2023-03-14
问题内容

我将我的新项目的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和带有自己的编译器(如Eclipse)的IDE(或任何其他代码处理工具/框架)时,即使你没有使用Java 8的新功能,也必须将其更新为支持Java 8的版本。 。

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

有时,如果你忽略了类文件的较新版本号,则可以使用较旧的编译器。但是,某些类型会混淆旧的类文件分析器,因为它们使用的新功能,特别是AnnotatedElement,现在有default方法,以及Map.Entry,一个interface现在有static方法。

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

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



 类似资料:
  • 我试图将文本解析为持续时间,如下所示: 但是我得到以下错误, 有人能告诉我我的问题在哪里吗?

  • 当xjc解析followinf xsd时,我得到了“Prolog中的错误” 我已经检查了xsd的有效性,没有发现任何错误。开始前没有字符也。。。

  • 问题内容: 我正在使用Node.js(与Express.js一起)将JSON数据对象从服务器传递到客户端视图。 当我将JSON对象直接呈现到视图时,我得到了预期显示在页面上的JSON对象(此工作): 我的输出看起来像这样(更大,很多嵌套的obj) 当我尝试将其传递给我的Jade View时,如下所示: 问题 当我将’tagsJSON’传递给视图时,输出包括html实体: jQuery抛出一个错误,

  • Hi iv'e刚刚启动了一个新应用程序,现在正在按照解析快速入门指南在此项目中设置解析。一切正常,直到我将此代码放入我的build.gradle: 然后,当我尝试运行我的应用程序时,我在gradle控制台中收到以下消息: *AGPBI: {"kind":"simple "," text ":"意外的顶级异常:"," sources ":[{ }]} AGP bi:{ " kind ":" simp