2014-10-02 61 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