错误的类文件使ant构建失败

时间:2014-11-21 20:26:54

标签: java ant

我刚刚将jdk1.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中,它怎么可能不好?有谁知道如何解决这个问题?

1 个答案:

答案 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