2014-11-21 94 views
2

我只是改变jdk1.61.8,使一个新的ant构建时,给出了这样的错误消息:坏类文件失败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

您正在混合Java版本,您正在使用JDK 6的'javac'和Java 8的标准库。确保您的Java安装程序是正确的(检查'PATH'和'JAVA_HOME')。 – Jesper 2014-11-21 20:28:52

+0

我的'javac'和'java_home'都指向'java1.8' – byteBiter 2014-11-21 20:33:14

+1

'java -version'显示什么? – manouti 2014-11-21 20:43:30

回答

1

首先检查javac任务是否未使用默认编译器以外的特定编译器。如果你设置executable属性到餐桌一个特定的编译器(带fork="yes"一起),可能发生这种情况作为task documentation提到:

可执行

到的javac可执行文件的完整路径,以在使用叉的情况=“是”。缺省为当前运行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