我刚刚将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
中,它怎么可能不好?有谁知道如何解决这个问题?
答案 0 :(得分:1)
首先检查javac
任务是否使用了默认编译器以外的特定编译器。如果您将executable
属性设置为分叉特定编译器(以及fork="yes"
),可能会发生这种情况,如task documentation中所述:
<强>可执行强>
在fork =&#34; yes&#34;的情况下使用的javac可执行文件的完整路径。默认为当前运行Ant的Java版本的编译器。如果fork =&#34; no&#34;则忽略。 从Ant 1.6开始,当使用jikes,jvc,gcj或sj时,此属性也可用于指定可执行文件的路径。
如果你只是在没有指定任何外部编译器的情况下调用javac
,那么Ant将使用运行Ant的Java版本附带的编译器。从错误消息中,它清楚地使用Java 1.6编译器(类文件的版本为50.0)。 Ant通常使用java
环境变量中的PATH
可执行文件运行。因此,请确保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