安装Elasticsearch自定义插件时遭遇Jackson Jar Hell问题求助
解决Elasticsearch自定义插件的Jackson依赖Jar Hell问题
这个Jar Hell问题其实很好解决,核心原因是你的插件打包时把Elasticsearch已经自带的Jackson相关Jar也包含进去了——哪怕版本完全一致,Elasticsearch的Jar Hell检查机制也会判定为冲突,因为它不允许同一个类出现在多个Jar包中。
看你的pom.xml配置,你只把elasticsearch依赖设为了provided scope,但jackson-databind还是默认的compile scope,这就导致Maven构建插件时会把Jackson的Jar打包到插件目录里,和Elasticsearch核心lib目录里的Jar产生重复冲突。
具体修复步骤
把Jackson相关依赖的scope也设置为provided,因为Elasticsearch已经在它的核心库中提供了这些类,不需要插件自己携带。修改后的pom.xml依赖部分如下:
<dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.2.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.10</version> <scope>provided</scope> </dependency> </dependencies>
额外注意事项
如果你还依赖Jackson的其他模块(比如jackson-core、jackson-annotations),同样需要把它们的scope也设为provided,避免它们被打包进插件引发新的Jar Hell问题。
修改完成后重新构建插件并安装,Jar Hell的错误就会消失了——现在插件会直接使用Elasticsearch自带的Jackson版本,不会再出现重复类的冲突。
内容的提问来源于stack exchange,提问作者Nariman Esmaiely Fard
相关产品推荐
相关产品推荐

