2012-07-31 51 views
12

我最近下载了Eclipse Juno并安装了最新的Groovy插件。在Eclipse中运行Groovy时抛出异常java.lang.IncompatibleClassChangeError

现在这里是我的Groovy文件的外观。

package groovy_support 

class TimePass { 
static void main(def args){ 
    println "Hello World" 
} 
} 

当我从我之前的eclipse版本(靛蓝)或从命令行运行它时,它运行。然而,在Eclipse Juno上,它在Eclipse控制台上抱怨以下异常。

Caught: java.lang.IncompatibleClassChangeError: Found class org.objectweb.asm.ClassVisitor, but interface was expected 
java.lang.IncompatibleClassChangeError: Found class org.objectweb.asm.ClassVisitor, but interface was expected 

请注意,“Groovy库”已经在类路径中。

现在我在做什么错在这里?

+0

你使用的是什么版本的groovy?您是否确定您正在编译的groovy版本与您正在运行的版本相同? – 2012-07-31 17:54:15

+0

我在命令行上使用groovy 2.0.1。在Eclipse Juno中,我的插件显示groovy-all-2.0和asm 4.0。在Eclipse Indigo中,我的插件显示相同。 :) – user898535 2012-08-01 12:20:40

+0

我的猜测是,你正在编译一个早期版本的groovy,但运行一个更高版本。当你进入Preferences - > Groovy - > Compiler时,你看到了什么版本? – 2012-08-02 04:01:20

回答

14

你在最新的groovy /依赖罐子? 。

java.lang.IncompatibleClassChangeError是由于后台兼容性问题。 客户端代码需要重新编译才能解决。

您所看到的具体错误是因为org.objectweb.asm.ClassVisitor是asm 3.2中的Interface和asm 4.0之后的Class

+0

当我在jenkins上构建它时,我遇到了不在本地机器中的相同错误。我从我的POM中排除了asm 3.2,但是当jenkins在完成运行集成测试后尝试运行maven编译器时仍然出现该错误。 – Venki 2012-08-31 14:55:31

+0

这就是正确的阿贾伊。如前所述,这似乎确实是问题所在。 :)它按照这个建议工作。谢谢。 :) – user898535 2012-12-18 10:17:15

+0

太好了。考虑通过点击答案附近的勾号来接受答案 – 2012-12-18 10:43:17

2

我在一个模块中使用Spring和Groovy时遇到了同样的问题。 3.1.2中的Spring仍然使用较老的ASM,Groovy使用类中的一个。虽然有可能调整一些排除,但我敢打赌这并不总是一种选择。

读完this thread我决定使用groovy-all.jar而不是所有需要的Groovy库列表。如果这是您的选择,那么如何避免任何进一步的问题可能是一种简单的方法。

相关问题