2013-07-25 56 views
1

我正在使用ElasticSearch和JackRabbit(或...我正在尝试)。 JackRabbit似乎取决于Lucene 3.6.x,ElasticSearch取决于4.3.1。我正在使用Maven和JBoss 7.1.1。我在类路径中获得了Lucene 4.3.1,但是随后在日志中由于JackRabbit需要使用旧版Lucene中的某些内容而导致日志文件突然崩溃。如何依赖两个不同版本的库?

我该如何解决这个问题?

回答

3

你将需要采取冲突库,你想使用(弹性搜索和jackrabbit)和make both into jboss as7 modules。使用jboss 7模块化类加载,您可以将它们中的每一个与其自己的依赖项“包含”为一个单独的模块,并仅向您的应用程序公开您使用的api。

它有点复杂(完整的文档here),但将允许你让他们每个人都使用他们自己的lucene版本 - 他们将被打包到一个模块中,并包含所有的依赖关系树。

编辑 - 关于如何仅输出te jboss modules documentation中某些模块内容的一些信息。您要确保不输出任何模块的lucene

+0

Okey,所以我应该在JBoss中安装ElasticSearch和Jackrabbit,然后我可以使用两个不同的版本? – LuckyLuke

+0

但是,如果您查看http://mvnrepository.com/artifact/org.elasticsearch/elasticsearch/0.90.2的所有依赖关系,是否意味着我必须将它们都安装为模块? – LuckyLuke

+0

@ LuckyLuke-您可以安装弹性搜索及其所有依赖项(因此链接到该列表中的所有内容)作为单个jboss模块,这只会暴露弹性搜索。有一个例子如何做到这一点在这里流口水 - http://www.samaxes.com/2012/11/running-drools-5-4-0-final-as-a-jboss-as-7-module/ ,只是为了看看他们如何列出所有drools的依赖关系 – radai

0

您可以创建两个自定义类加载器实例,并使用其中的一个加载ElasticSearch类,并使用另一个加载JackRabbit。第一个必须从Lucene 3.6.x jar,另一个从v.4.3.1 jar

+0

...在托管的j2ee环境中的自定义类加载器?! – radai

+0

为什么不呢?他们将拥有jboss为应用程序提供的classloader作为父级,他们将尝试首先找到Lucene类,然后委托给父 –

+0

,并且您需要将它们放在正常的jboss类加载不会找到它们的位置,并使用设置上下文类加载器。如果你对它们有任何幻想(比如把它们写成jms或infinispan的一部分),你将处于一个痛苦的世界。 jboss具有自定义类加载。用它。 – radai

相关问题