maven-scr-plugin не генерирует структуру папок OSGI-INF с Java 10
Кто-нибудь знает, совместим ли плагин 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 не является классом ImageIO SPI
Когда я обновляю версию плагина maven scr до версии 1.26.0 (последняя), он жалуется, что "процессоры аннотаций не найдены в classpath"
Поэтому я добавил org.apache.felix.scr.annotations в качестве зависимости в соответствии с инструкциями в разделе Использование плагина Apache Felix Maven SCR.
Теперь я получаю следующую ошибку:
[ОШИБКА] Manifest org.wso2.carbon:org.wso2.carbon.registry.core:bundle:4.4.34-SNAPSHOT: входной файл не существует: сгенерирован целевой /scr-plugin /OSGI-INF/serviceComponents.xml
Я пробовал это даже с последним выпуском равноденствия (Фотон), который недоступен в центральном репо maven.
Буду признателен за любую оказанную помощь.
1 ответ
Я мог бы заставить плагин maven scr работать с java 10 и с аннотациями felix scr, изменив библиотеку felix.scr.generator-1.1.4, которая является зависимостью от плагина maven scr версии 1.7.4 (который отлично работал с java 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
Вот некоторые факты, которые я узнал - надеясь, что это кому-то поможет,
Для автоматической генерации xml-файлов метаданных osgi во время сборки maven можно использовать любую из следующих схем аннотаций.
- Феликс SCR аннотации
- Аннотации декларационных услуг (DS) OSGi
В более старых версиях плагина maven scr использовались аннотации felix scr, но позже в документациях упоминалось, что он начал поддерживать аннотации felix scr и аннотации DS из osgi, который является стандартным набором аннотаций для генерации xml-файлов метаданных osgi. Это делается путем добавления соответствующей зависимости к pom с помощью плагина scr. Однако более новые версии плагина scr, похоже, не поддерживают аннотации felix scr, и я обнаружил, что плагин scr находится в режиме обслуживания, и лучше использовать плагин комплекта maven (без плагина scr), который поддерживает только osgi DS аннотации.
Так как аннотации Felix SCR используются в программной платформе, я обновляюсь, у меня было 2 варианта для продолжения. Либо для исправления проблем совместимости с Java 10 в более старой версии (1.7.4) плагина scr, либо для преобразования существующих аннотаций scr в аннотации osgi ds, чтобы я мог избежать использования плагина scr. Я решил, что лучше попытаться сохранить существующую схему аннотаций, потому что ее изменение затрагивает тех, кто использует платформу со своими собственными пакетами osgi.