OsgiPlugin-плагин так и не разрешил ошибку сервиса
Я начал разрабатывать аддон jira, но я получаю ошибки.
Мой последний, который я не могу исправить, это
[INFO] [talledLocalContainer] QuickReload-ошибка установщика плагина [c.a.p.osgi.завод.OsgiPlugin] плагин 'XY', он никогда не решен услуг&имя_класса' фильтр '(&(objectclass которых=ху.classname) (objectClass=xy.имя класса))'
Что здесь не так?
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 }
Надеюсь, это поможет.