2013-07-25 88 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

相關問題