OsgiPlugin-плагин так и не разрешил ошибку сервиса


Я начал разрабатывать аддон jira, но я получаю ошибки.

Мой последний, который я не могу исправить, это

[INFO] [talledLocalContainer] QuickReload-ошибка установщика плагина [c.a.p.osgi.завод.OsgiPlugin] плагин 'XY', он никогда не решен услуг&имя_класса' фильтр '(&(objectclass которых=ху.classname) (objectClass=xy.имя класса))'

Что здесь не так?

2 5

2 ответа:

Это происходит, когда вы пытаетесь внедрить в объект вашего плагина другой объект вашего плагина, и вы делаете это так, как если бы другой объект был другого плагина и был экспортирован как общедоступный сервис OSGi.

В JIRA можно объявить классы Java плагина в качестве компонентов. Это означает, что создание экземпляров и внедрение зависимостей (например, через конструктор) будут автоматически делегированы на Spring Framework, который является частью JIRA. Обычно мы делаем это, чтобы потерять заботу о зависимостях экземпляров и классов. Существует два типа компонентов: публичные и частные. Общедоступные компоненты будут доступны для импорта для различных плагинов, отличных от вашего. Другие плагины могут импортировать их, а затем использовать через инъекцию зависимостей. Частные компоненты будут работать так же, как и публичные, но другие плагины не смогут импортировать или видеть их.

Если у вас есть один компонент, скажем A, который зависит от другого компонента, B, оба они являются частью вашего плагина, вы не должны импортировать компонент B, чтобы он был доступен для A, потому что он уже является частью вашего плагина. Перед JIRA 7 для импорта компонента вы разместили на элементе atlassian-plugin.xml A <component-import>. JIRA 7 Далее вы ставите @ComponentImport перед параметром конструктора, когда вы делаете инъекцию зависимостей через конструктор.

Поэтому я думаю, что вы ошиблись, поставив <component-import> на компонент, который приходит непосредственно из вашего плагина, вместо того, чтобы иметь <component>. Или если у вас есть JIRA 7 или более поздняя версия, что вы сделали неправильно нужно было поставить @ComponentImport перед компонентом вашего собственного плагина, и решением было бы удалить эту аннотацию. По крайней мере, этот последний был моим случаем, и удаление этих аннотаций из инъекции зависимостей компонентов, поступающих из того же плагина, я заставил его работать.

У меня была похожая проблема, когда я разрабатывал плагин для Confluence v6. 1. 3. Я мигрировал с Atlassian Spring Scanner v1 на v2. После выполнения инструкций в руководстве Atlassian Spring Scanner v2 , я подумал, что это было хорошо, чтобы пойти, но имел эту ошибку:

[INFO] [talledLocalContainer] 2017-08-24 22: 54: 52,602 ошибка [localhost-startStop-1] [плагин.OSGi для.завод.OsgiPlugin] плагин logAndClearOustandingDependencies - ком.стечение обстоятельств.слияние.плагин.страницы-количество просмотренных не разрешен сервис '&pageViewedService' фильтр '(&(objectclass которых=ком.стечение обстоятельств.слияние.плагин.PageViewedService) (objectClass=com.стечение обстоятельств.слияние.плагин.PageViewedService))'

Причиной этой ошибки было @ComponentImport PageViewedService service:

@Autowired
public AlertUserMacro(@ComponentImport PageViewedService service, 
        @ComponentImport PageManager pageManager) {
    //constructor...
}

Это было нормально в Spring Scanner v1, но не в Spring Scanner v2. Импорт не нужен, потому что PageViewedService является частью моего плагина. Мне нужно было импортировать PageManager, потому что его область действия находится вне моего плагина. Решение:

@Autowired
public AlertUserMacro(PageViewedService service, @ComponentImport PageManager pageManager) {
    //constructor
}

Надеюсь, это поможет.