2

У меня есть пакет 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

+0

Rikke, вы нашли решение наконец? –

+0

Нет, не совсем. В итоге нам пришлось обновить все, чтобы использовать последнюю версию antlr, так что нам больше не нужны две версии пакета. К счастью, это выполнимо в разумные сроки. Это может быть не всегда так! –

+0

Я нашел ошибку в Eclipse [Проверка продукта не находит плагина, необходимого в двух версиях] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=367187) и предоставляет исправление для него. Кажется, он будет исправлен в следующей версии. –

ответ

0

, кажется, что вы устанавливаете автоматический старт верно для двух пучков при использовании ракеты-носителя на основе Bundle. Вы не можете сделать то же самое при использовании панели запуска на основе функций, если только вы не установили значение «Default Auto-Start» true или не создали определение продукта и не установили начальный уровень для этих пакетов.

+0

У меня есть «Default Auto-Start», установленный как true для запуска функции и пучка. Вы имеете в виду, что я должен был бы автоматически задать автозапуск для пакетов в этой функции? –

+0

хорошо, у меня были проблемы с этим «Автозапуск по умолчанию» один раз. Поэтому я начал создавать файлы продуктов для тестирования моей rcp, основанной на характеристиках. вы можете установить начальный уровень отдельных пакетов, содержащихся в функции при ее использовании. этот файл .product можно использовать для запуска equinox (он также создаст файл запуска на основе пакета в рабочей области). – Cristiano

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