当前位置: 首页 > 知识库问答 >
问题:

中的Java UnsupportedClassVersionError错误版本号。使用ant任务定义的类文件

潘畅
2023-03-14

我有一个使用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 home变量指向jdk 1.5。在我的系统上安装了java 8。ant版本(按ant版本)将作为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位,反之亦然,尝试过安装不同的JRE,也尝试过不同的ant版本。但有些事情我无法弄清真相。

你能解释一下吗?

谢谢。

共有2个答案

白宏义
2023-03-14

我有同样的问题(使用Java1.5和Ant 1.7.1)。我升级到ant 1.9.7,这解决了我的问题。确保您更改了ANT_HOME,antrc位置。

蒙墨竹
2023-03-14

目前,我的java home变量指向jdk 1.5。

这可能就是问题所在。看起来您正在尝试使用为更新的Java平台编译的Ant版本。在Java的古老副本上运行它是行不通的。

您应该卸载JDK 1.5安装。它已经过时多年了。您已经安装了Java 8(我假设是JDK),所以请使用它。

然后更新JAVA_HOME以指向JAVA 8安装

我曾尝试将JDK更改为64位,反之亦然

那没用。这不是32位对64位的问题。问题是你是

 类似资料:
  • 在构建中使用自定义Ant任务 为了让你的构建可以自定义任务, 你可以使用 taskdef(通常更容易) 或者 typedef Ant 任务, 就像你在一个build.xml文件中一样. 然后,你可以参考内置 Ant 任务去定制 Ant 任务. 例 16.5.使用自定义 Ant 任务 build.gradle task check << { ant.taskdef(resource: 'ch

  • 问题内容: 当我包含必须从源代码编译的开源库时,出现此错误。现在,网络上的所有建议都表明该代码是在一个版本中编译并在另一版本(旧版本中是新版本)中执行。但是,我的系统上只有一个JRE版本。如果我运行命令: 并在Eclipse中检查Java库的属性,我得到 因此,我必须得出结论,类本身内部的其他东西引发了异常?那有可能吗? 问题答案: 我了解到这样的错误消息通常是正确的。当无法(按您的想法)想到所报

  • 16.1.使用 Ant 任务和 Ant 类型的构建 在构建脚本中, Ant 属性是由 Gradle提供的. 这是一个用于参考的 AntBuilder 实例. AntBuilder 用于从构建脚本访问 Ant 任务, 类型和属性. 下面的例子解释了从 Ant 的 build.xml 格式到 Grooy 的映射. 你可以通过调用 AntBuilder 实例的方法执行 Ant 任务. 你可以使用任务名称

  • 当我试图用proguard混淆某个应用程序时,我总是会遇到这种错误 我已经更新了Proguard并检查了项目配置文件,但总是出现相同的错误。我正在使用Intellij IDEA的最新版本

  • 我的项目是用Maven构建的。我很高兴和Maven一起建造。现在,我需要用Ant构建它(我希望我不需要!!!)。我希望使用现有的maven依赖项——也就是说,希望保留pom进行依赖项管理。 所以,我写了这个任务: 但是,ant编译输出抱怨mypomdeps指向的库(在jars中)丢失了。 javac无法看到我想要的类路径的原因是什么? 我是否正确使用了由工件:依赖项生成的filesetId? 我的

  • 我有一个罐子,里面有一个蚂蚁任务。我的com/mebigfatguy/stringliterals/antlib.xml是 运行jar tf StringLiterals.jar 我将jar放入~/.ant/lib中,当我尝试运行引用它的任务时,如下所示: 我得到了 文字: 这里的GitHub项目https://GitHub.com/mebigfatguy/stringliterals