16

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

现在这是我的 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 库”已经在类路径中。

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

4

3 回答 3

18

你在最新的 groovy/dependent jars 上吗?.

发生这种java.lang.IncompatibleClassChangeError情况是由于向后兼容问题。客户端代码需要重新编译才能解决。

您看到的具体错误是因为org.objectweb.asm.ClassVisitor是asm 3.2中的接口和asm 4.0 及更高版本中的类。

于 2012-07-31T12:33:09.030 回答
2

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

在阅读了这个帖子之后,我决定使用 groovy-all.jar 而不是所有 Groovy 所需库的列表。如果这对您来说是一个选择,那么如何避免任何进一步的问题可能是一种简单的方法。

于 2013-02-22T09:24:37.537 回答
0

对于以下错误,我尝试了许多解决方案。java.lang.IncompatibleClassChangeError:找到接口 org.objectweb.asm.MethodVisitor,但需要类。只有一个有效的方法是从放心的依赖中排除 groovy 工件。有关完整的解决方法,请参阅以下链接。

https://blog.jayway.com/2013/04/12/solving-asm-conflicts-after-upgrading-to-groovy-2-1/

于 2019-09-27T09:44:18.570 回答