【发布时间】:2017-09-20 02:20:54
【问题描述】:
我的 java 应用程序引用了一组 jar,它们都是用 jdk 1.6 和 maven 2.2.1 构建的。 需要将我们的 java 版本升级到 1.8 以获得特定功能。因此,我尝试将我的应用程序指向 jdk 1.8.0_144 并尝试运行它。我收到以下错误:
* stderr:注解处理被禁用,因为它需要一个兼容 1.6 的 JVM java.util.Map$Entry 类型无法解析。它是从所需的 .class 文件中间接引用的
注意:应用程序和依赖 jar 仍然使用 jdk 1.6 构建(依赖 jar 是遗留代码,我更喜欢不使用新的 java 版本编译)
我错过了什么? 我阅读了一些需要 Eclipse 升级的解决方案。但是,在这里直接出现问题的不是日食。 我还遇到了一些关于升级 ecj.jar 的讨论。但是,我不确定是否需要这样做。
非常感谢所有帮助。
【问题讨论】:
-
这还不够,它什么也没做。这就是为什么你仍然使用 java 6 但依赖
JAVA_HOME的东西使用 java 8 的问题 -
JAVA_HOME 被 Tomcat 和各种 IDE 使用,但不被 Java 使用。您根本不需要为 Java 设置 CLASSPATH,如果您将其设置为包含一些 Java 安装,请删除它的那部分。并确保 PATH 变量包含对 Java 1.8 bin 目录的引用,而不是早期版本。
-
它期望版本 50 的事实清楚地证明您正在运行 1.6,而不是 1.8。
-
看,如果您收到消息“类文件的版本错误 52.0,应该是 50.0”,那么这是一个事实,您使用 java 8 和 java 6 编译的类。不可能得到该消息使用 java 8.
-
java/lang/annotation/Retention是 JRE 的一部分。如果报52版本,那么是 Java 8。问题是工具也不能处理class文件,还是老版本ECJ,或者链中还有另一个字节码处理工具。这完全符合问题的原始错误消息,其中工具抱怨找不到“符合 1.6 的 JVM”,没有意识到 JVM 符合 1.8,因此支持 1.6 的所有功能