java - elasticsearch lib不能同时添加commons-beanutils和commons-collections

标签 java json elasticsearch jar elasticsearch-plugin

我为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.jarcommons-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/

相关文章:

java - 检索错误数据

ruby - elasticsearch轮胎 gem 完全匹配

elasticsearch - Elasticsearch排名短/相关标题少

elasticsearch - 仅在特定时间运行 ElastAlert

java - 无法测试我的网页中的错误消息

java - 如何在 Spring Boot 应用程序中实现安全性?

java - 无法从内部类转换到类

java - 如何在 ListView 中显示 arraylist 中的所有解析数据?

ajax 将 JSON 数组 POST 到 Nodejs 服务器删除键

java - 如何使用 Java 对象转义 Json 中的双引号