2013-11-26 137 views
1

我正在使用CGLIB程序,包括作爲一個大包的依賴(版本2.1_3)的一部分,並已書面使用半熟處理器做一些降價到HTML的轉換中的新功能。蒸穀米和CGLIB的依賴衝突

問題出現在依賴衝突中。 如果我什麼都不做,我所有的試驗是在蒸穀米功能失效,用線沿線的消息:

java.lang.IncompatibleClassChangeError: org/parboiled/transform/ParserClassNode 

如果我包括以下排除

<exclusion> 
    <groupId>asm</groupId> 
    <artifactId>asm</artifactId> 
</exclusion> 

在我的大依賴性聲明,所有的預煮過的測試會通過,但大多數人會失敗,有消息像

Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.proxy.Enhancer 

我使用pegdown 1.4.1

有什麼建議嗎?瀏覽互聯網似乎使用ASM的新版本(4.0或更高版本,此刻的一個在我的項目是1.5.3)可能會有幫助,但要排除的ASM我已經和導入後一個沒有幫助建議。

回答

1

問題是cglib很難遷移。這是因爲:

  • 新CGLIB的版本是其以前的版本不兼容
  • ASM版本不其以前的版本(CGLIB是建立在ASM的頂部)

FAQ to ASM兼容因此推薦:

如何解決不同ASM API之間的衝突在全局類路徑中或在同一個ClassLoader中可用的版本?

正在使用ASM進行字節碼處理的工具和框架(例如 Hibernate,CGLIB,AspectWerkz)應該在自己的名稱空間中重新打包ASM代碼。這可以通過Jar Jar Links工具實現自動化。

我建議你做同樣的CGLIB。將整個依賴項移動到一個新的包中(創建一個獨立的名稱空間)並僅使用此依賴項。這是醜陋的,但它是唯一的解決方案。像Spring或休眠狀態的其他項目處理相同的方式CGLIB。