2012-07-31 53 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庫列表。如果這是您的選擇,那麼如何避免任何進一步的問題可能是一種簡單的方法。

相關問題