У меня есть пакет OSGI, который зависит от пакета, который открывается через функцию. Пакет зависит от конкретной версии пакета, скажем com.company.antlr.runtime (3.0.1)
. Эта функция, в свою очередь, упаковывает две версии пакета: com.company.antlr.runtime (3.0.1)
и com.company.antlr.runtime (3.2.0)
.Запуск функции на основе Eclipse не может разрешить зависимость
Проблема заключается в том, что, когда я делаю функции на основе конфигурации запуска в Eclipse, с моей пачке (в особенности), а функция, содержащая пакет я завишу, я получаю недостающее ограничение ошибка проверки о том, что требуемый пакет com.company.antlr.runtime(3.0.1)
есть отсутствует.
Добавление com.company.antlr.runtime (3.0.1)
как пучок к запуску функции не имеет никакого эффекта, я все равно получаю ту же ошибку проверки.
Если, с другой стороны, я создаю конфигурацию запуска на основе пучка, включая те же самые пакеты , что и те, которые упакованы в эту функцию, нет проблемы с проверкой.
Проблема может быть проиллюстрирована с этим минимальным, например:
Расслоение org.example.examplebundle
имеет манифест:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name:Examplebundle
Bundle-SymbolicName: org.example.examplebundle
Bundle-Version:1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.company.antlr.runtime;bundle-version="[3.0.1,3.0.1]"
И особенность org.example.examplefeature
имеет feature.xml:
<feature
id="org.example.examplefeature"
label="Examplefeature"
version="1.0.0.qualifier">
<plugin
id="org.eclipse.osgi"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.example.examplebundle"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.company.antlr.runtime"
download-size="0"
install-size="0"
version="3.0.1"
unpack="false"/>
<plugin
id="com.company.antlr.runtime"
download-size="0"
install-size="0"
version="3.2.0"
unpack="false"/>
</feature>
Making запуск функции с помощью этой функции приведет к ошибке проверки. Создание пучка на основе пучка с четырьмя пучками, включенными в эту функцию, НЕ дает ошибки проверки.
Затем я попытался добавить необходимые пакеты для использования консоли и удалить комплект org.example.examplebundle
из функции org.example.examplefeature
, а затем запустить его с помощью запуска на основе функций. Затем я заметил, что пучок com.company.antlr.runtime (3.0.1)
не был запущен вообще.
Если я добавлю те же необходимые связки к запуску на основе пучка, я могу заметить, что оба являются com.company.antlr.runtime (3.0.1)
и com.company.antlr.runtime (3.2.0)
.
Я полагаю, что на основе этого резольвера для запуска, основанного на характеристиках, достаточно, чтобы пакет с наивысшим номером версии был достаточным и, следовательно, не запускал старую версию вообще.
С этой гипотезой в виду, я попытался прямо заявить в feature.xml, что мне нужен идеальный матч для com.company.antlr.runtime (3.0.1)
, включив в следующий фрагмент кода в feature.xml:
<requires>
<import
plugin="com.company.antlr.runtime"
version="3.0.1"
match="perfect"
/>
</requires>
Но, увы , но безрезультатно.
Итак, теперь мой вопрос: есть ли способ решить эту проблему, сохраняя запуск функции?
Для полноты: Я бег Eclipse, Kepler 4.3 и OSGI 3.8.1
Rikke, вы нашли решение наконец? –
Нет, не совсем. В итоге нам пришлось обновить все, чтобы использовать последнюю версию antlr, так что нам больше не нужны две версии пакета. К счастью, это выполнимо в разумные сроки. Это может быть не всегда так! –
Я нашел ошибку в Eclipse [Проверка продукта не находит плагина, необходимого в двух версиях] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=367187) и предоставляет исправление для него. Кажется, он будет исправлен в следующей версии. –