在使用Eclipse Juno运行Groovy时,出现了异常java.lang.IncompatibleClassChangeError。

16

我最近下载了 Eclipse Juno,并安装了最新的 Groovy 插件。

现在这是我的 Groovy 文件所看起来的样子。

package groovy_support

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

在我的前一个 Eclipse 版本 (Indigo) 或通过命令行运行时,它可以运行。然而,在 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 Libraries”已经在类路径上了。
现在,我在这里做错了什么?

你使用的是哪个版本的Groovy?你确定你编译时使用的版本和运行时使用的版本是相同的吗? - Andrew Eisenberg
我正在命令行上使用Groovy 2.0.1。在Eclipse Juno中,我的插件显示为groovy-all-2.0和asm 4.0。在Eclipse Indigo中,我的插件也是如此。 :) - user898535
我的猜测是您正在使用早期版本的Groovy进行编译,但是在运行时使用了较新的版本。当您前往“首选项-> Groovy->编译器”时,您看到的是哪个版本? - Andrew Eisenberg
你可以接受下面Ajay的答案,因为他的建议让我倾向于你可能遇到的问题。 - Andrew Eisenberg
3个回答

18

你是否使用了最新的Groovy/依赖JAR包?

java.lang.IncompatibleClassChangeError发生时是由于向后不兼容的问题。 需要重新编译客户端代码以解决此问题。

你所看到的具体错误是因为在ASM 3.2中,org.objectweb.asm.ClassVisitor是一个接口,而在ASM 4.0及以后版本中则是一个


当我在Jenkins上构建时,我发现即使不在我的本地机器上也会出现相同的错误。我已经从我的POM中排除了asm 3.2,但是当Jenkins尝试运行Maven编译器并完成集成测试后,仍然会出现该错误。 - Venki
没错,Ajay。如之前所提到的,那似乎确实是问题所在。 :) 按照建议操作后,它起作用了。谢谢。 :) - user898535
很好。请考虑点击答案旁边的勾选按钮接受答案。 - Ajay George

2
我在一个模块中同时使用Spring和Groovy时也遇到了同样的问题。Spring 3.1.2仍然使用较旧的ASM,而Groovy则使用带有该类的ASM。虽然可能可以调整一些排除项,但我敢打赌这并不总是一个选项。
在阅读了this thread之后,我决定使用groovy-all.jar代替所有所需的Groovy库列表。如果这对您来说是一个选项,那么这可能是避免任何进一步问题的简单方法。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接