我为elasticsearch制作了一个本地java插件,并导入了net.sf.json
jar 在我的插件中。所以我在 path\elasticsearch-2.0.0\lib
中添加了以下 jar :
commons-beanutils-1.8.0
commons-collections-3.2.1
commons-lang-2.5
commons-logging-1.1.1
ezmorph-1.0.6
json-lib-2.4-jdk15
但是当我运行
./elasticsearch
,它显示以下异常:Exception in thread "main" java.lang.IllegalStateException: jar hell!
class: org.apache.commons.collections.ArrayStack
jar1: D:\Program Files\elasticsearch-2.0.0\lib\commons-beanutils-1.8.0.jar
jar2: D:\Program Files\elasticsearch-2.0.0\lib\commons-collections-3.2.1.jar
at org.elasticsearch.bootstrap.JarHell.checkClass(JarHell.java:267)
at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:185)
at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:86)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:156)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
Refer to the log for complete error details.
引用checkClass,我猜是因为
commons-beanutils-1.8.0.jar
和 commons-collections-3.2.1.jar
两者都有路径 org\apache\commons\collections
.我该如何处理?
还有其他方法可以在elasticsearch中为插件添加额外的jar吗?
最佳答案
由于您使用的是 Maven,因此您可以使用 dependency exclusions在您的 pom.xml
对于json-lib
Artifact :
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
<exclusions>
<exclusion>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</exclusion>
<exclusion>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</exclusion>
</exclusions>
</dependency>
将会发生的是
json-lib
的编译时依赖项不会被使用。请注意,自您的 json-lib
版本起,您就有产生冲突的风险。可能取决于 commons-beanutils
的不同版本和 commons-collections
,但这值得一试。更新
然后,您只需要为您的直接
commons-beanutils
提供另一个排除项。依赖: <dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.0</version>
<exclusions>
<exclusion>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</exclusion>
</exclusions>
</dependency>
关于java - elasticsearch lib不能同时添加commons-beanutils和commons-collections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34012050/