我正在使用ElasticSearch和JackRabbit(或...我正在尝试)。 JackRabbit似乎取决于Lucene 3.6.x,ElasticSearch取决于4.3.1。我正在使用Maven和JBoss 7.1.1。我在类路径中获得了Lucene 4.3.1,但是随后在日志中由于JackRabbit需要使用旧版Lucene中的某些内容而导致日志文件突然崩溃。如何依赖两个不同版本的库?
我该如何解决这个问题?
我正在使用ElasticSearch和JackRabbit(或...我正在尝试)。 JackRabbit似乎取决于Lucene 3.6.x,ElasticSearch取决于4.3.1。我正在使用Maven和JBoss 7.1.1。我在类路径中获得了Lucene 4.3.1,但是随后在日志中由于JackRabbit需要使用旧版Lucene中的某些内容而导致日志文件突然崩溃。如何依赖两个不同版本的库?
我该如何解决这个问题?
你将需要采取冲突库,你想使用(弹性搜索和jackrabbit)和make both into jboss as7 modules。使用jboss 7模块化类加载,您可以将它们中的每一个与其自己的依赖项“包含”为一个单独的模块,并仅向您的应用程序公开您使用的api。
它有点复杂(完整的文档here),但将允许你让他们每个人都使用他们自己的lucene版本 - 他们将被打包到一个模块中,并包含所有的依赖关系树。
编辑 - 关于如何仅输出te jboss modules documentation中某些模块内容的一些信息。您要确保不输出任何模块的lucene
您可以创建两个自定义类加载器实例,并使用其中的一个加载ElasticSearch类,并使用另一个加载JackRabbit。第一个必须从Lucene 3.6.x jar,另一个从v.4.3.1 jar
Okey,所以我应该在JBoss中安装ElasticSearch和Jackrabbit,然后我可以使用两个不同的版本? – LuckyLuke
但是,如果您查看http://mvnrepository.com/artifact/org.elasticsearch/elasticsearch/0.90.2的所有依赖关系,是否意味着我必须将它们都安装为模块? – LuckyLuke
@ LuckyLuke-您可以安装弹性搜索及其所有依赖项(因此链接到该列表中的所有内容)作为单个jboss模块,这只会暴露弹性搜索。有一个例子如何做到这一点在这里流口水 - http://www.samaxes.com/2012/11/running-drools-5-4-0-final-as-a-jboss-as-7-module/ ,只是为了看看他们如何列出所有drools的依赖关系 – radai