首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elasticsearch lib不能同时添加commons和collections。

elasticsearch lib不能同时添加commons和collections。
EN

Stack Overflow用户
提问于 2015-12-01 03:24:37
回答 2查看 323关注 0票数 1

我为elasticsearch制作了一个本地java插件,并在插件中导入了net.sf.json jar。因此,我在path\elasticsearch-2.0.0\lib中添加了以下jar

代码语言:javascript
复制
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时,它显示了以下异常:

代码语言:javascript
复制
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吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-01 06:26:45

我暂时解决这个问题的方法是删除-beanutils jar中的文件夹org.apache.commons.collections

因为我发现这个文件夹中的类文件也包含在公共集合中。

而且这种方法非常不明智,它可以工作,我只需要删除并添加一次lib文件。

或者使用不包含集合forder的commons的其他版本,如1.9.2版

更新

感谢@Val的思考,更好的pom.xml

代码语言:javascript
复制
<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>
    </exclusions>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.2</version>
    </dependency> 
票数 0
EN

Stack Overflow用户

发布于 2015-12-01 05:52:40

由于您使用的是Maven,所以可以在您的受抚养人除外中为json-lib工件使用json-lib

代码语言:javascript
复制
    <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-beanutilscommons-collections,所以可能会产生冲突,但这值得一试。

更新

然后,您只需要对直接的commons-beanutils依赖项进行另一次排除:

代码语言:javascript
复制
    <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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34012050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档