我有一个使用jdk1.5的项目,它使用ant作为构建工具。正如你所知道的,在ant脚本中,我们可以像这样编写自己的自定义任务,然后我们可以使用它。
<taskdef name="loadxml" classname="SomeClass" classpathref="CLASSPATH"/>
这是java类的样子
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
class SomeClass extends Task
{
.......................
}
该代码在windows server 2003中工作正常,但我试图在windows 7 64位运行它。
目前我的java主变量指向jdk 1.5。在我的系统上,我安装了java 8。ant版本(通过ant -version)将以1.7.1发布。
ant脚本工作完美,但是当涉及到上面提到的xml行时,它给出了以下错误:
java.lang.UnsupportedClassVersionError: Bad version number in .class file
at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:508)
at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:397)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.Delegati
ngMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at org.apache.tools.ant.Main.runBuild(Main.java:758)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.Main.start(Main.java:179)
at org.apache.tools.ant.Main.main(Main.java:268)
Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .class file
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:116)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:394)
Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at org.apache.tools.ant.AntClassLoader.defineClassFromData(AntClassLoader.java:1146)
at org.apache.tools.ant.AntClassLoader.getClassFromStream(AntClassLoader.java:1324)
at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1388
)
at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1341)
at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1088)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
我试过把JDK改成64位,反之亦然,也试过安装不同的jres,也试过不同的ant版本。但不知怎么的,我就是搞不清楚。
你能解释一下吗?
目前我的java主变量指向jdk 1.5。
这可能就是问题所在。看起来您正在尝试使用针对较新的Java平台编译的Ant版本。在旧版本的Java上运行它是行不通的。
你应该卸载JDK 1.5安装。它已经过时好几年了。你已经安装了Java 8(我假设是JDK),所以使用它。
然后更新JAVA_HOME以指向Java 8的安装。
我已经尝试将JDK更改为64位,反之亦然
那没有用。这不是32位和64位的问题。问题是你正在使用<<一个古老的JRE/JDK通过JAVA_HOME
我有同样的问题(使用Java 1.5和Ant 1.7.1)。我升级到ant 1.9.7,这解决了我的问题。确保您更改了ANT_HOME、antrc的位置。