我刚刚将jdk
从1.6
更改为1.8
,并且在进行新的ant
构建时,它给出了以下错误消息:
[javac] /usr/workspace/test/src/JsonString.java:7: cannot access java.lang.Object
[javac] bad class file: java/lang/Object.class(java/lang:Object.class)
[javac] class file has wrong version 52.0, should be 50.0
[javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
[javac] public class JsonString {
[javac]
这很奇怪。 Object
类应该在java1.8
,怎么会不好?有谁知道如何解决这个问题?
首先检查javac
任务是否未使用默认编译器以外的特定编译器。如果您将 executable
属性设置为派生特定编译器(以及 fork="yes"
),则可能会发生这种情况,如任务文档中所述:
可执行
javac 可执行文件的完整路径,以便在 fork="yes" 的情况下使用。缺省为当前正在运行 Ant 的 Java 版本的编译器。如果 fork="no"则忽略。 从 Ant 1.6 开始,此属性也可用于在使用 jikes、jvc、gcj 或 sj 时指定可执行文件的路径。
如果您只是调用javac
而不指定任何外部编译器,那么 Ant 将使用运行 Ant 的 Java 版本附带的编译器。从错误消息来看,它显然使用的是 Java 1.6 编译器(类文件的版本为 50.0)。Ant 通常使用在 PATH
环境变量中找到的 java
可执行文件运行。因此,请确保在 PATH
变量中指定的第一个 Java 目录是 Java 1.8。
理想情况下,您应该将JAVA_HOME
设置为 Java 1.8 的路径,并PATH
引用JAVA_HOME
本身,以便两者都指向相同的安装。
JAVA_HOME -> /path_to_jdk1.8
PATH -> %JAVA_HOME%;...;/path_to_some_other_jdk