我刚刚在将我的一个新项目的JDK版本从7u45切换到8u20时遇到了一个奇怪的错误。我的类(class)开始时无害的 LogManager 声明被拒绝并出现以下错误:
The type java.lang.reflect.AnnotatedElement cannot be resolved. It is indirectly referenced from required .class files
这是代码:
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
现在有 static
方法。
Eclipse 似乎在说“«classname» 无法解析”时,在找不到类文件的引用和它读取失败的类文件之间没有区别。
这同样适用于使用 ECJ 作为嵌入式编译器的所有工具和框架。
关于java - 在 Java 8 中使用 LogManager (l4j2) 时出错(无法解析 java.lang.reflect.AnnotatedElement),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102115/