Нет квалифицирующего компонента типа [com.atlassian.jira.выпуск.Временный оператор контроля подключений]

#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 не работает в этом случае, но обходной путь работает как заклинание.