maven-scr-plugin не генерирует структуру папок OSGI-INF с Java 10 - PullRequest
0 голосов
/ 29 августа 2018

Кто-нибудь знает, совместим ли плагин maven scr с java 10?

Я пытаюсь создать программную платформу на основе равноденствия osgi с java 10, и я не могу получить плагин scr для генерации структуры папки OSGI-INF (которая содержит serviceComponents.xml) в целевой папке. Как результат, плагин maven bundle жалуется, что не может найти serviceComponents.xml, и сборка завершается неудачей.

Все работает нормально, если я использую старую версию плагина scr (1.7.4) с java 8.

Если я пытаюсь собрать его с использованием Java 10, возникает следующая ошибка.

[ОШИБКА] Не удалось выполнить цель org.apache.felix: maven-scr-plugin: 1.7.4: scr (generate-scr-scrdescriptor) для проекта carbon-kernel: Выполнение generate-scr-scrdescriptor из цель org.apache.felix: maven-scr-plugin: 1.7.4: сбой scr: org.apache.felix.scrplugin.tags.annotation.AnnotationTagProvider не является классом SPI ImageIO

Когда я обновляю версию плагина maven scr до версии 1.26.0 (последняя), он жалуется, что «процессоры аннотации не найдены в classpath»

Поэтому я добавил org.apache.felix.scr.annotations в качестве зависимости в соответствии с инструкциями в Использование плагина Apache Felix Maven SCR

Теперь я получаю следующую ошибку:

[ОШИБКА] Манифест org.wso2.carbon: org.wso2.carbon.registry.core: bundle: 4.4.34-SNAPSHOT: Входной файл не существует: сгенерирован целевой / scr-plugin / OSGI- INF / serviceComponents.xml

Я пробовал это даже с последней версией равноденствия (Фотон), которая недоступна в центральном репо maven.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 05 сентября 2018

Я мог бы заставить плагин maven scr работать с java 10 и с аннотациями felix scr, изменив библиотеку felix.scr.generator-1.1.4, которая является зависимостью от плагина maven scr версии 1.7.4 (который работал нормально с Ява 8, как я уже упоминал в вопросе)

я заменил

final Iterator<AnnotationTagProvider> serviceIter = ServiceRegistry.lookupProviders(AnnotationTagProvider.class, classLoader);

с

final Iterator<AnnotationTagProvider> serviceIter = ServiceLoader.load(AnnotationTagProvider.class, classLoader).iterator();

в AnnotationTagProviderManager классе felix.scr.generator-1.1.4

как предложено в аналогичная проблема .

А также обновлены исходные и целевые конфигурации плагина компилятора maven. Теперь структура папок OSGI-INF создается с помощью модифицированного генератора felix scr и плагина felix scr

Вот некоторые факты, которые я узнал - надеясь, что это кому-нибудь поможет,

Чтобы автоматически генерировать xmls метаданных osgi во время сборки maven, можно использовать одну из следующих схем аннотаций.

  • Аннотации Felix SCR
  • Аннотации OSGi декларативных услуг (DS)

В старых версиях плагина maven scr использовались аннотации felix scr, но позже в документациях упоминалось, что он начал поддерживать аннотации felix scr и аннотации DS из osgi, что является стандартным набором аннотаций для генерации метаданных osgi xmls. , Это делается путем добавления соответствующей зависимости к pom с помощью плагина scr. Однако более новые версии плагина scr, похоже, не поддерживают аннотации felix scr, и я обнаружил, что плагин scr находится в режиме обслуживания, и лучше использовать плагин комплекта maven (без плагина scr), который поддерживает только osgi DS аннотации.

Так как аннотации felix scr используются в программной платформе, которую я обновляю, у меня было 2 варианта для продолжения. Либо для исправления проблем совместимости с java 10 в более старой версии (1.7.4) плагина scr, либо для преобразования существующих аннотаций scr в аннотации osgi ds, чтобы я мог избежать использования плагина scr. Я решил, что лучше попытаться сохранить существующую схему аннотаций, потому что ее изменение затрагивает тех, кто использует платформу со своими собственными пакетами osgi.

...