Scala SBT上的libGDX:roboVM后端引用了错误的ASM版本

Scala SBT上的libGDX:roboVM后端引用了错误的ASM版本,scala,libgdx,robovm,Scala,Libgdx,Robovm,当我试图用roboVM编译游戏时,我不断得到错误: java.lang.IncompatibleClassChangeError: class org.robovm.compiler.plugin.objc.ObjCProtocolProxyPlugin$1 has interface org.objectweb.asm.ClassVisitor as super class 我调查了几个小时,得出的结论是它与ASM库有关:在ASM库中,直到版本3.3.2,类ClassVisitor是一个接口

当我试图用roboVM编译游戏时,我不断得到错误:

java.lang.IncompatibleClassChangeError: class org.robovm.compiler.plugin.objc.ObjCProtocolProxyPlugin$1 has interface org.objectweb.asm.ClassVisitor as super class
我调查了几个小时,得出的结论是它与ASM库有关:在ASM库中,直到版本3.3.2,类ClassVisitor是一个接口。它在4.0中升级为抽象类,robovm后端字节码使用>=4.0版本,而我的SBT生成器尝试使用<4.0版本

此处可以找到相关的roboVM代码:

现在,虽然我意识到这是一个问题,但我不知道如何解决它。我不想从源代码编译libGDX

为了安装我的应用程序,我使用了现有的模板,即以下模板:。此外,我分别使用最新版本:

sbt 0.13.5
libGDX 1.4.1
scala 2.11.3
roboVM 1.0.0-alpha-04

现在,当我进一步调查,搜索这个集团中的罪犯时,我发现确实有两个asm包含在类路径中,前面提到的版本是3.3.1:

scalac-classpath…:~/.ivy2/cache/asm/asm-all/jars/asm-all-3.3.1.jar:…:~/.ivy2/cache/org.ow2.asm/asm-all/jars/asm-all-4.2.jar:…

这显然是造成坠机的原因。现在我只需要找到3.3.1被设置为依赖项的地方,我很快就找到了它,终于找到了:pfn/android sdk插件。无论出于何种原因,他们都将其设置为依赖项(尽管在代码中不知何故没有使用它)。显然没有冲突,因为组ID不同:asm:asm all:3.3.1与org.ow2.asm all:4.2

这很容易是我遇到过的最愚蠢的事情,我咬牙切齿,花了这么长时间和这么多调试才完成。哼

我通过克隆android sdk插件库并将ASM版本/组id调整为4.2来修复它。然后我继续
sbt publish local
,并增加了项目中的版本号依赖项,以适应克隆的快照版本

我希望这能帮助那些无意中发现这种行为的人

再见,

丹耶尔。

谢谢你,我相信你为我节省了很多时间。你应该接受你自己的答案。