2013-11-26 106 views
2

我有一个groovy脚本,我想(第一次)编译和运行使用ant build.xml文件。它抛出一个不支持major.minor版本51.0,同时编译与ANT groovy脚本

java.lang.UnsupportedClassVersionError 

我搜索了它,结果表明它可能是版本不匹配的原因。那么我有java 1.6.0_35和ANT版本1.8.1。什么可能是错误的原因?请帮忙。

+0

哪个版本的常规用是这样的? –

+0

这是最新的groovy 2.2版本发布。 – NanoNi

+0

你使用的是什么版本的Jar?我认为这是'groovy-all-2.2.0-indy.jar'吗?这是一个特殊的Java 7构建,我刚刚检查过'embeddable/groovy-all-2.2.0.jar'和'embeddable/groovy-all-2.2.1.jar',并且都将Java 5作为它们的类版本'org.codehaus.groovy.ant.Groovyc' –

回答

4

可能的情况是,您正在使用已安装的JDK 7编译它。并且运行它时使用了系统路径中的JRE 6。

您可以检查版本的命令:

java -version 
javac -version 

UPDATE

这是groovyc的本身,这需要JDK 7,你可以尝试运行较早的Groovy释放一个或升级你的JDK。

+0

java -version和javac -version都是1.6.0_35 – NanoNi

+0

版本51代表JDK 7.所以它以某种方式潜入编译过程。我的猜测是:你的旧文件在编译期间没有更新,或者你可以从ant脚本中输出'javac'版本(''),或者你的ANT脚本以某种方式找到JDK7的安装位置 - 也就是'JAVA_HOME'指向JDK7的环境变量 –

+0

我的'JAVA_HOME'变量是C:\ Java \ jdk-6u35-x64。实际上,错误是在build.xml文件'classname =“org.codehaus.groovy.ant.Groovyc'中的这一行中引发的,而终端中显示的错误是java.lang.UnsupportedClassVersionError:org/codehaus/groovy/ant/Groovyc'。这有帮助吗? – NanoNi

1

org.codehaus.groovy.ant.Groovyc应该不需要的Java 7,应该需要Java 5

事实上,我只是检查groovy-all-2.2.0.jargroovy-all-2.2.1.jargroovy-ant-2.2.0.jargroovy-ant-2.2.1.jarjavap,他们都表明:

$ javap -verbose org/codehaus/groovy/ant/Groovyc.class 
Classfile org/codehaus/groovy/ant/Groovyc.class 
    Last modified 18-Nov-2013; size 26620 bytes 
    MD5 checksum 6d629004a728203e26a1671626cf3dab 
    Compiled from "Groovyc.java" 
public class org.codehaus.groovy.ant.Groovyc extends org.apache.tools.ant.taskdefs.MatchingTask 
    SourceFile: "Groovyc.java" 
    InnerClasses: 
     #306; //class org/codehaus/groovy/ant/Groovyc$1 
     public statiC#488= #114 of #698; //Entry=class java/util/Map$Entry of class java/util/Map 
    minor version: 0 
    major version: 49 
    flags: ACC_PUBLIC, ACC_SUPER 

major version: 49就是Java 5.

唯一需要注意的是如果您使用indy罐子。这些是建立对Java 7中使用new InvokeDynamic support

所以,作为一般规则,你应该使用groovy-ant-2.2.1.jar或完整groovy-all-2.2.1.jar(这两者都将与Java工作5+)

相关问题