Затмение:Как гарантировать, что jar в плагине имеет приоритет перед другими версиями в других местах?
-
19-08-2019 - |
Вопрос
Я разрабатываю плагин eclipse, который содержит определенную версию Lucene.Мне нужно сгенерировать индекс поиска и развернуть его так, чтобы он мог быть прочитан другим приложением, которое использует ту же версию Lucene.
Недавно я обновил eclipse до версии 3.4, и индекс поиска теперь не читается вторым приложением.Я вижу, что eclipse 3.4 содержит более новую версию Lucene, и я предполагаю, что эта версия используется при генерации индекса.
Как я могу точно определить, какая версия Lucene используется во время создания индекса?Мой путь к классу плагина начинается с моей комплектной версии Lucene, поэтому я ожидал, что моя версия должна получить приоритет.
ТИА
Решение 2
Кажется, теперь это работает.Для тех из вас, кому интересно, это то, что я должен был сделать:
- Удалил файл Lucene 1.4.3 jar из моего плагина
- Скопировал старый плагин Lucene из более старой версии eclipse в версию 3.4.
- Удалил все зависимости с помощью мастера plugin.xml.Теперь видны все плагины Lucene.
- Выбрал версию 1.4.xx и изменил свойства, чтобы установить максимальную версию до 1.5
- Добавлены другие зависимости плагина
- Изменен путь сборки:удален старый jar, добавлена зависимость плагина Lucene 1.4.3
- Пересчитанная конфигурация запуска.Плагин Lucene 1.4.3 не был добавлен автоматически, поэтому добавил его вручную.
- Теперь, когда индекс сгенерирован, загружается версия 1.4.3.
Надеюсь, это кому-то пригодится.
Другие советы
Возможно, вы захотите дать Средство проверки пути к классу и Помощник по пути к классу попробовать.
Возможно, таким образом вы сможете точно определить, какие jar используются в вашей среде разработки, чтобы сравнить их с jar, присутствующими в вашей среде развертывания, где Luce генерирует индекс.
Конфликты jar для проверки ClasPath:
Помощник по пути к классам заблокирован (скрыт) Просмотр классов:
Поскольку вы разрабатываете плагин Eclipse, вам следует изучить OSGi.Плагины Eclipse являются экземплярами пакетов OSGi, а OSGi имеет надежную модель для обработки зависимостей и управления версиями между пакетами.
Я не знаю вашего конкретного кода, но если бы я планировал использовать Lucene в своем плагине, я бы использовал функциональность OSGi 'Import-Package' или 'Require-Bundle' для выражения зависимости;Я бы не стал включать Lucene JAR в свой плагин.Если бы каждый подключаемый модуль включал свой собственный Lucene JAR, вы бы потратили впустую место, но, что более важно, в итоге получили бы несовместимые версии (как у вас).
Веб-сайт OSGI это не лучшее место для начала вашего путешествия по OSGi (это хорошо для спецификаций OSGi и блога Питера Криенса).Лучше начать с чего-нибудь вроде Нила Бартлетта онлайн книга.