2013-07-25 3 views
1

Я использую ElasticSearch и JackRabbit (или ... я тоже пытаюсь). JackRabbit, похоже, зависит от Lucene 3.6.x и ElasticSearch в зависимости от 4.3.1. Я использую Maven и JBoss 7.1.1. Я получаю Lucene 4.3.1 на пути к классам, но затем h *** ломается в журнале, потому что JackRabbit требует что-то от более старой Lucene.Как зависеть от двух разных версий библиотеки?

Как это решить?

ответ

3

вам нужно будет использовать конфликтующие библиотеки, которые вы хотите использовать (эластичный поиск и шутер) и make both into jboss as7 modules. с модульной загрузкой jboss 7 вы можете «содержать» каждый из них с собственными зависимостями в качестве отдельного модуля и предоставлять вашему приложению только api, который вы используете.

его немного сложный (полный docs here), но позволит вам использовать каждую из них собственную версию lucene - каждый из них будет упакован в модуль со всем теоретическим деревом зависимостей.

EDIT - есть дополнительная информация о том, как экспортировать только некоторые из содержимого модуля в te jboss modules documentation. вы хотите убедиться, что вы не экспортируете lucene из любого из модулей.

+0

Okey, поэтому я должен установить ElasticSearch и Jackrabbit в JBoss, а затем я могу использовать две разные версии? – 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/ , просто чтобы увидеть, как они перечисляют все зависимости от слюни – radai

0

Вы можете создать два экземпляра пользовательских экземпляров классов и загрузить класс ElasticSearch одним из них и JackRabbit с другим. Первый должен загружать классы из Lucene 3.6.x jar, другой из v.4.3.1 jar

+0

... пользовательские загрузчики классов внутри управляемого j2ee env?! – radai

+0

почему бы и нет? они будут иметь загрузчик классов, который jboss предоставил для приложения в качестве родителя, они сначала попытаются найти классы Lucene, а затем делегировать родителям –

+0

, и вам нужно будет разместить их там, где обычная загрузка классов jboss не найдет их и не получит к ним доступ со специальным кодом, который устанавливает загрузчик контекстного класса. и если вы попробуете что-нибудь с ними (например, напишите их как часть jms или infinispan), вы окажетесь в мире боли. jboss имеет пользовательскую загрузку классов. используй это. – radai

Смежные вопросы