2014-10-02 63 views
0

我最近更新了Elastic Search從0.90.0到1.3.2,現在我得到了與另一個依賴項使用的Lucene版本的衝突。該方案如下所示:Grails依賴於Lucene的夢魘

罐子A使用Lucene的4.9.0 罐子B使用Lucene的3.3.0

的一點是,我得到一個java.lang.VerifyError的,因爲B碼是壓倒一切的最終Lucene類的方法在4.9.0版本中不是最終的。

我已經試過這沒有成功:

compile ('A') 
compile ('B') 
compile ('org.apache.lucene:lucene-core:4.9.0') { 
    excludes(B) 
} 
compile ('org.apache.lucene:lucene-analyzers-common:4.9.0') { 
    excludes(B) 
} 

我不知道是什麼更多的事情要做,在此任何線索?

謝謝!

回答

0

假設你想要最新版本的Lucene,你的排除實際上是向後的。

你B的聲明應該是這個樣子:

compile ('B') { 
    excludes "lucene-core", "lucene-analyzers-common" 
} 

包括可能在該列表中衝突以及任何其他lucene的罐子。

如果您沒有在代碼中專門使用任何lucene庫(除了elasticsearch插件),您可以刪除顯式的Lucene聲明。

我對Lucene不太瞭解,告訴你4.9.0是否與3.3.0向後兼容,但是這個解決方案至少應該確保4.9.0是你項目的類路徑,而不是 3.3.0

+0

問題是B重新定義了一個在Lucene 3.3.0中是最終的方法,但它在4.9.0中並不是最終的,所以我得到一個java.lang.VerifyError,因爲這個:( – user2083783 2014-10-02 15:46:56

+0

如果3.3.0仍然在類路徑中,那麼這是有道理的,你能確認它不再在類路徑上嗎?哪個代碼實際上拋出VerifyError? – rmlan 2014-10-02 15:59:31

+0

引發VerifyError的代碼是位於B中的代碼,它擴展了Lucene的分析器類,正在重新定義一個方法最終在3.3.0而不是最終在4.9.0 – user2083783 2014-10-02 16:09:12