#spring #osgi #jira-plugin
Вопрос:
Я начал разрабатывать плагин для импорта внешней системы Jira, и я должен загрузить файл JSON, используя его страницу настройки, но когда я добавляю «TemporaryAttachmentsMonitorLocator» в конструктор класса SetupPage и нажимаю кнопку моего импортера, он завершается ошибкой: «Нет подходящего компонента типа [com.atlassian.jira.проблема.Временный оператор мониторинга]»
[INFO] [talledLocalContainer] org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dev.addax.jira.plugins.trello2jira.web.TrelloSetupPage': Unsatisfied dependency expressed through constructor argument with index 4 of type [com.atlassian.jira.issue.TemporaryAttachmentsMonitorLocator]: No qualifying bean of type [com.atlassian.jira.issue.TemporaryAttachmentsMonitorLocator] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport(value=)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: **No qualifying bean of type [com.atlassian.jira.issue.TemporaryAttachmentsMonitorLocator] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency**. Dependency annotations: {@com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport(value=)}
[INFO] [talledLocalContainer] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)
public class TrelloSetupPage extends AbstractSetupPage {
private final TemporaryAttachmentsMonitorLocator locator;
public TrelloSetupPage(@ComponentImport UsageTrackingService usageTrackingService, @ComponentImport WebInterfaceManager webInterfaceManager,
@ComponentImport PluginAccessor pluginAccessor, @ComponentImport EventPublisher eventPublisher,
@ComponentImport TemporaryAttachmentsMonitorLocator locator) {
super(usageTrackingService, webInterfaceManager, pluginAccessor, eventPublisher);
this.locator = locator;
}
// ... other content omitted.
}
Другие параметры в моем конструкторе разрешены правильно. Только это то, что он терпит неудачу. Если я удалю этот класс, я смогу перейти к своему набору, как и ожидалось.
Наконец, класс экспортируется системным пакетом OSGi, и я проверил, что он даже все еще используется в качестве сервиса плагином Jira native JIM.
Есть идеи, в чем может быть причина, по которой он не находит этот класс?
Ответ №1:
Я удалил @ComponentImport TemporaryAttachmentsMonitorLocator locator
и включил ComponentAccessor.getOSGiComponentInstanceOfType(TemporaryAttachmentsMonitorLocator.class)
в тело конструктора. Я не знаю, почему @ComponentImport не работает в этом случае, но обходной путь работает как заклинание.