Hi,
I'm looking for help injecting dependencies for JIRA custom userpicker field.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>ru.some.jira</groupId> <artifactId>timetrack</artifactId> <version>1.0.0-SNAPSHOT</version> <organization> <name>Example Company</name> <url>https://example.ru/</url> </organization> <name>some Timetrack plugin for jira</name> <description>This is the ru.some.jira:timetrack plugin for Atlassian JIRA.</description> <packaging>atlassian-plugin</packaging> <dependencies> <dependency> <groupId>com.atlassian.jira</groupId> <artifactId>jira-api</artifactId> <version>${jira.version}</version> <scope>provided</scope> </dependency> <!-- Add dependency on jira-core if you want access to JIRA implementation classes as well as the sanctioned API. --> <!-- This is not normally recommended, but may be required eg when migrating a plugin originally developed against JIRA 4.x --> <dependency> <groupId>com.atlassian.jira</groupId> <artifactId>jira-core</artifactId> <version>${jira.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.atlassian.jira</groupId> <artifactId>jira-software-application</artifactId> <version>${jira.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.atlassian.jira</groupId> <artifactId>jira-application-properties-plugin</artifactId> <version>${jira.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>com.atlassian.plugin</groupId> <artifactId>atlassian-spring-scanner-annotation</artifactId> <version>${atlassian.spring.scanner.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.atlassian.plugin</groupId> <artifactId>atlassian-spring-scanner-runtime</artifactId> <version>${atlassian.spring.scanner.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> <scope>provided</scope> </dependency> <!-- WIRED TEST RUNNER DEPENDENCIES --> <dependency> <groupId>com.atlassian.plugins</groupId> <artifactId>atlassian-plugins-osgi-testrunner</artifactId> <version>${plugin.testrunner.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> <version>1.1.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.2-atlassian-1</version> </dependency> <!-- Uncomment to use TestKit in your project. Details at https://bitbucket.org/atlassian/jira-testkit --> <!-- You can read more about TestKit at https://developer.atlassian.com/display/JIRADEV/Plugin+Tutorial+-+Smarter+integration+testing+with+TestKit --> <!-- <dependency> <groupId>com.atlassian.jira.tests</groupId> <artifactId>jira-testkit-client</artifactId> <version>${testkit.version}</version> <scope>test</scope> </dependency> --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.6</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.8.5</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>com.atlassian.maven.plugins</groupId> <artifactId>maven-jira-plugin</artifactId> <version>${amps.version}</version> <extensions>true</extensions> <configuration> <productVersion>${jira.version}</productVersion> <productDataVersion>${jira.version}</productDataVersion> <!-- Uncomment to install TestKit backdoor in JIRA. --> <!-- <pluginArtifacts> <pluginArtifact> <groupId>com.atlassian.jira.tests</groupId> <artifactId>jira-testkit-plugin</artifactId> <version>${testkit.version}</version> </pluginArtifact> </pluginArtifacts> --> <enableQuickReload>true</enableQuickReload> <enableFastdev>false</enableFastdev> <!-- See here for an explanation of default instructions: --> <!-- https://developer.atlassian.com/docs/advanced-topics/configuration-of-instructions-in-atlassian-plugins --> <instructions> <Atlassian-Plugin-Key>${atlassian.plugin.key}</Atlassian-Plugin-Key> <!-- Add package to export here --> <Export-Package>ru.some.jira.timetrack.api,</Export-Package> <!-- Add package import here --> <Import-Package>org.springframework.osgi.*;resolution:="optional", org.eclipse.gemini.blueprint.*;resolution:="optional", *</Import-Package> <!-- Ensure plugin is spring powered --> <Spring-Context>*</Spring-Context> </instructions> </configuration> </plugin> <plugin> <groupId>com.atlassian.plugin</groupId> <artifactId>atlassian-spring-scanner-maven-plugin</artifactId> <version>${atlassian.spring.scanner.version}</version> <executions> <execution> <goals> <goal>atlassian-spring-scanner</goal> </goals> <phase>process-classes</phase> </execution> </executions> <configuration> <scannedDependencies> <dependency> <groupId>com.atlassian.plugin</groupId> <artifactId>atlassian-spring-scanner-external-jar</artifactId> </dependency> </scannedDependencies> <verbose>false</verbose> </configuration> </plugin> </plugins> </build> <properties> <jira.version>7.1.2</jira.version> <amps.version>6.2.6</amps.version> <plugin.testrunner.version>1.2.3</plugin.testrunner.version> <atlassian.spring.scanner.version>1.2.13</atlassian.spring.scanner.version> <!-- This key is used to keep the consistency between the key in atlassian-plugin.xml and the key to generate bundle. --> <atlassian.plugin.key>${project.groupId}.${project.artifactId}</atlassian.plugin.key> <!-- TestKit version 6.x for JIRA 6.x --> <testkit.version>6.3.11</testkit.version> </properties> </project>
<?xml version="1.0" encoding="UTF-8"?> <atlassian-plugin key="${atlassian.plugin.key}" name="${project.name}" plugins-version="2"> <plugin-info> <description>${project.description}</description> <version>${project.version}</version> <vendor name="${project.organization.name}" url="${project.organization.url}"/> <param name="plugin-icon">images/pluginIcon.png</param> <param name="plugin-logo">images/pluginLogo.png</param> </plugin-info> <!-- add our i18n resource --> <resource type="i18n" name="i18n" location="timetrack"/> <!-- add our web resources --> <web-resource key="timetrack-resources" name="timetrack Web Resources"> <dependency>com.atlassian.auiplugin:ajs</dependency> <resource type="download" name="timetrack.css" location="/css/timetrack.css"/> <resource type="download" name="timetrack.js" location="/js/timetrack.js"/> <resource type="download" name="images/" location="/images"/> <context>timetrack</context> </web-resource> <customfield-type name="Remaining Estimate At Sprint Start" i18n-name-key="remaining-estimate-at-sprint-start.name" key="remaining-estimate-at-sprint-start" class="ru.some.jira.customfields.RemainingEstimateAtSprintStart"> <description key="remaining-estimate-at-sprint-start.description">The Remaining Estimate At Sprint Start Plugin</description> <resource name="view" type="velocity" location="/templates/customfields/remaining-estimate-at-sprint-start/view.vm"/> <resource name="edit" type="velocity" location="/templates/customfields/remaining-estimate-at-sprint-start/edit.vm"/> <resource name="xml" type="velocity" location="/templates/customfields/remaining-estimate-at-sprint-start/xml.vm"/> </customfield-type> <customfield-type name="Issue Comebacks From Testing Count" i18n-name-key="issue-comebacks-from-testing-count.name" key="issue-comebacks-from-testing-count" class="ru.some.jira.customfields.IssueComebacksFromTestingCount"> <description key="issue-comebacks-from-testing-count.description">The Remaining Estimate At Sprint Start Plugin</description> <resource name="view" type="velocity" location="/templates/customfields/issue-comebacks-from-testing-count/view.vm"/> <resource name="edit" type="velocity" location="/templates/customfields/issue-comebacks-from-testing-count/edit.vm"/> <resource name="xml" type="velocity" location="/templates/customfileds/issue-comebacks-from-testing-count/xml.vm"/> </customfield-type> <customfield-type name="Issue Responsible Person" i18n-name-key="issue-responsible-person.name" key="issue-responsible-person" class="ru.some.jira.customfields.IssueResponsiblePerson"> <description key="issue-responsible-person.description">Person, responsible for issue to be done</description> <resource name="edit" type="velocity" location="templates/customfields/issue-responsible-person/edit.vm"/> <resource name="view" type="velocity" location="templates/customfields/issue-responsible-person/view.vm"/> <resource name="xml" type="velocity" location="templates/customfields/issue-responsible-person/xml.vm"/> </customfield-type> </atlassian-plugin>
package ru.some.jira.customfields; import com.atlassian.jira.security.JiraAuthenticationContext; import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport; import com.atlassian.plugin.spring.scanner.annotation.component.Scanned; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.atlassian.jira.issue.customfields.impl.UserCFType; import com.atlassian.jira.issue.customfields.converters.UserConverter; import com.atlassian.jira.issue.customfields.manager.GenericConfigManager; import com.atlassian.jira.issue.fields.config.manager.FieldConfigSchemeManager; import com.atlassian.jira.issue.customfields.persistence.CustomFieldValuePersister; import com.atlassian.jira.config.properties.ApplicationProperties; import com.atlassian.jira.project.ProjectManager; import com.atlassian.jira.template.soy.SoyTemplateRendererProvider; import com.atlassian.jira.security.groups.GroupManager; import com.atlassian.jira.security.roles.ProjectRoleManager; import com.atlassian.jira.bc.user.search.UserSearchService; import com.atlassian.jira.issue.fields.rest.json.beans.JiraBaseUrls; import com.atlassian.jira.user.UserHistoryManager; import com.atlassian.jira.user.UserFilterManager; import com.atlassian.jira.util.I18nHelper; import com.atlassian.jira.issue.fields.rest.json.UserBeanFactory; import com.atlassian.jira.issue.customfields.impl.FieldValidationException; import com.atlassian.jira.issue.Issue; import com.atlassian.jira.issue.fields.CustomField; import com.atlassian.jira.issue.fields.config.FieldConfig; import com.atlassian.jira.issue.fields.layout.field.FieldLayoutItem; import javax.inject.Named; import java.util.List; import java.util.Map; @Scanned public class IssueResponsiblePerson extends UserCFType { private static final Logger log = LoggerFactory.getLogger(IssueResponsiblePerson.class); @ComponentImport private final CustomFieldValuePersister customFieldValuePersister; @ComponentImport private final GenericConfigManager genericConfigManager; @ComponentImport private final UserConverter userConverter; @ComponentImport private final JiraAuthenticationContext jiraAuthenticationContext; @ComponentImport private final ApplicationProperties applicationProperties; @ComponentImport private final FieldConfigSchemeManager fieldConfigSchemeManager; @ComponentImport private final ProjectManager projectManager; @ComponentImport private final SoyTemplateRendererProvider soyTemplateRendererProvider; @ComponentImport private final GroupManager groupManager; @ComponentImport private final ProjectRoleManager projectRoleManager; @ComponentImport private final UserSearchService userSearchService; @ComponentImport private final JiraBaseUrls jiraBaseUrls; @ComponentImport private final UserHistoryManager userHistoryManager; @ComponentImport private final UserFilterManager userFilterManager; @ComponentImport private final I18nHelper i18nHelper; @ComponentImport private final UserBeanFactory userBeanFactory; public IssueResponsiblePerson(final CustomFieldValuePersister customFieldValuePersister, final UserConverter userConverter, final GenericConfigManager genericConfigManager, final ApplicationProperties applicationProperties, final JiraAuthenticationContext jiraAuthenticationContext, final FieldConfigSchemeManager fieldConfigSchemeManager, final ProjectManager projectManager, final SoyTemplateRendererProvider soyTemplateRendererProvider, final GroupManager groupManager, final ProjectRoleManager projectRoleManager, final UserSearchService userSearchService, final JiraBaseUrls jiraBaseUrls, final UserHistoryManager userHistoryManager, final UserFilterManager userFilterManager, final I18nHelper i18nHelper, final UserBeanFactory userBeanFactory) { super(customFieldValuePersister, userConverter, genericConfigManager, applicationProperties, jiraAuthenticationContext, fieldConfigSchemeManager, projectManager, soyTemplateRendererProvider, groupManager, projectRoleManager, userSearchService, jiraBaseUrls, userHistoryManager, userFilterManager, i18nHelper, userBeanFactory); this.customFieldValuePersister = customFieldValuePersister; this.genericConfigManager = genericConfigManager; this.jiraAuthenticationContext = jiraAuthenticationContext; this.applicationProperties = applicationProperties; this.userConverter = userConverter; this.fieldConfigSchemeManager = fieldConfigSchemeManager; this.projectManager = projectManager; this.soyTemplateRendererProvider = soyTemplateRendererProvider; this.groupManager = groupManager; this.projectRoleManager = projectRoleManager; this.userSearchService = userSearchService; this.jiraBaseUrls = jiraBaseUrls; this.userHistoryManager = userHistoryManager; this.userFilterManager = userFilterManager; this.i18nHelper = i18nHelper; this.userBeanFactory = userBeanFactory; } @Override public Map<String, Object> getVelocityParameters(final Issue issue, final CustomField field, final FieldLayoutItem fieldLayoutItem) { final Map<String, Object> map = super.getVelocityParameters(issue, field, fieldLayoutItem); // This method is also called to get the default value, in // which case issue is null so we can't use it to add currencyLocale if (issue == null) { return map; } FieldConfig fieldConfig = field.getRelevantConfig(issue); //TODO: add what you need to the map here return map; } }
[INFO] [talledLocalContainer] 2016-11-16 16:02:12,348 http-nio-2990-exec-6 ERROR admin 962x17x1 4vx92b 192.168.1.142 /secure/admin/ViewCustomFields.jspa [c.a.plugin.module.PrefixDelegatingModuleFactory] Detected an error instantiating the module via Spring. This usually means that you haven't created a <component-import> for the interface you're trying to use. https://developer.atlassian.com/x/TAEr for more details. [INFO] [talledLocalContainer] 2016-11-16 16:02:12,379 http-nio-2990-exec-6 ERROR admin 962x17x1 4vx92b 192.168.1.142 /secure/admin/ViewCustomFields.jspa [c.a.plugin.manager.SafeModuleExtractor] Exception when retrieving plugin module ru.some.jira.timetrack:issue-responsible-person, disabling plugin ru.some.jira.timetrack [INFO] [talledLocalContainer] com.atlassian.util.concurrent.LazyReference$InitializationException: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ru.some.jira.customfields.IssueResponsiblePerson': Unsatisfied dependency expressed through constructor argument with index 3 of type [com.atlassian.jira.config.properties.ApplicationProperties]: : No qualifying bean of type [com.atlassian.jira.config.properties.ApplicationProperties] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.atlassian.jira.config.properties.ApplicationProperties] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} [INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:149) [INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference.get(LazyReference.java:112) [INFO] [talledLocalContainer] at com.atlassian.util.concurrent.ResettableLazyReference.get(ResettableLazyReference.java:92) [INFO] [talledLocalContainer] at com.atlassian.jira.plugin.AbstractJiraModuleDescriptor.getModule(AbstractJiraModuleDescriptor.java:175) [INFO] [talledLocalContainer] at com.atlassian.plugin.manager.SafeModuleExtractor$1.apply(SafeModuleExtractor.java:46) [INFO] [talledLocalContainer] at com.atlassian.plugin.manager.SafeModuleExtractor$1.apply(SafeModuleExtractor.java:38) [INFO] [talledLocalContainer] at com.google.common.collect.Iterators$8.transform(Iterators.java:799) [INFO] [talledLocalContainer] at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) [INFO] [talledLocalContainer] at com.google.common.collect.Iterators$7.computeNext(Iterators.java:651) [INFO] [talledLocalContainer] at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) [INFO] [talledLocalContainer] at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) [INFO] [talledLocalContainer] at com.google.common.collect.ImmutableCollection$Builder.addAll(ImmutableCollection.java:300) [INFO] [talledLocalContainer] at com.google.common.collect.ImmutableList$Builder.addAll(ImmutableList.java:691) [INFO] [talledLocalContainer] at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:275) [INFO] [talledLocalContainer] at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:226) [INFO] [talledLocalContainer] at com.atlassian.plugin.manager.EnabledModuleCachingPluginAccessor.getEnabledModulesByClass(EnabledModuleCachingPluginAccessor.java:175) [INFO] [talledLocalContainer] at com.atlassian.plugin.manager.ForwardingPluginAccessor.getEnabledModulesByClass(ForwardingPluginAccessor.java:42) [INFO] [talledLocalContainer] at com.atlassian.plugin.manager.ProductPluginAccessor.getEnabledModulesByClass(ProductPluginAccessor.java:17) [INFO] [talledLocalContainer] at com.atlassian.extension.plugins.PluginAccessorExtensionProvider.getExtensionsByClassUncacheable(PluginAccessorExtensionProvider.java:35) [INFO] [talledLocalContainer] at com.atlassian.extension.provider.base.UncacheableExtensionProvider.getExtensionsByClass(UncacheableExtensionProvider.java:34) [INFO] [talledLocalContainer] at com.atlassian.extension.base.CachingExtensionAccessor.lambda$getExtensionsByClassSupplier$1(CachingExtensionAccessor.java:52) [INFO] [talledLocalContainer] at com.atlassian.extension.base.CachingExtensionAccessor.getExtensionsByClass(CachingExtensionAccessor.java:35) [INFO] [talledLocalContainer] at com.atlassian.extension.plugins.ExtensionAccessingPluginAccessor.getEnabledModulesByClass(ExtensionAccessingPluginAccessor.java:48) [INFO] [talledLocalContainer] at com.atlassian.jira.plugin.customfield.CustomFieldTypeModuleDescriptorsImpl.getCustomFieldTypes(CustomFieldTypeModuleDescriptorsImpl.java:29) [INFO] [talledLocalContainer] at com.atlassian.jira.issue.managers.DefaultCustomFieldManager.getCustomFieldTypes(DefaultCustomFieldManager.java:236) [INFO] [talledLocalContainer] at com.atlassian.jira.web.action.admin.customfields.ViewCustomFields.isCustomFieldTypesExist(ViewCustomFields.java:56) [INFO] [talledLocalContainer] ... 3 filtered [INFO] [talledLocalContainer] at java.lang.reflect.Method.invoke(Method.java:498) [INFO] [talledLocalContainer] at webwork.util.InjectionUtils$DefaultInjectionImpl.invoke(InjectionUtils.java:70) [INFO] [talledLocalContainer] at webwork.util.InjectionUtils.invoke(InjectionUtils.java:56) [INFO] [talledLocalContainer] at webwork.util.ValueStack.findValue(ValueStack.java:417) [INFO] [talledLocalContainer] at webwork.util.SimpleTest.test(SimpleTest.java:408) [INFO] [talledLocalContainer] at webwork.util.ValueStack.test(ValueStack.java:157) [INFO] [talledLocalContainer] at webwork.view.taglib.IfTag.doStartTag(IfTag.java:40) [INFO] [talledLocalContainer] at jsp.secure.admin.views.customfields.customfields_jsp._jspx_meth_ww_005fif_005f0(customfields_jsp.java:210) [INFO] [talledLocalContainer] at jsp.secure.admin.views.customfields.customfields_jsp._jspService(customfields_jsp.java:111) [INFO] [talledLocalContainer] at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) [INFO] [talledLocalContainer] at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) [INFO] [talledLocalContainer] ... 18 filtered [INFO] [talledLocalContainer] at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:37) [INFO] [talledLocalContainer] ... 74 filtered [INFO] [talledLocalContainer] at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:70) [INFO] [talledLocalContainer] ... 36 filtered [INFO] [talledLocalContainer] at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) [INFO] [talledLocalContainer] ... 74 filtered [INFO] [talledLocalContainer] at com.atlassian.labs.httpservice.resource.ResourceFilter.doFilter(ResourceFilter.java:59) [INFO] [talledLocalContainer] ... 42 filtered [INFO] [talledLocalContainer] at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:70) [INFO] [talledLocalContainer] ... 89 filtered [INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [INFO] [talledLocalContainer] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [INFO] [talledLocalContainer] at java.lang.Thread.run(Thread.java:745) [INFO] [talledLocalContainer] Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ru.some.jira.customfields.IssueResponsiblePerson': Unsatisfied dependency expressed through constructor argument with index 3 of type [com.atlassian.jira.config.properties.ApplicationProperties]: : No qualifying bean of type [com.atlassian.jira.config.properties.ApplicationProperties] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.atlassian.jira.config.properties.ApplicationProperties] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1139) [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1042) [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:342) [INFO] [talledLocalContainer] ... 2 filtered [INFO] [talledLocalContainer] at java.lang.reflect.Method.invoke(Method.java:498) [INFO] [talledLocalContainer] at com.atlassian.plugin.osgi.spring.DefaultSpringContainerAccessor.createBean(DefaultSpringContainerAccessor.java:97) [INFO] [talledLocalContainer] at com.atlassian.plugin.module.ClassPrefixModuleFactory.createModule(ClassPrefixModuleFactory.java:35) [INFO] [talledLocalContainer] at com.atlassian.plugin.module.PrefixDelegatingModuleFactory.createModule(PrefixDelegatingModuleFactory.java:88) [INFO] [talledLocalContainer] at com.atlassian.jira.plugin.AbstractJiraModuleDescriptor.createModule(AbstractJiraModuleDescriptor.java:187) [INFO] [talledLocalContainer] at com.atlassian.jira.plugin.AbstractJiraModuleDescriptor$1.create(AbstractJiraModuleDescriptor.java:64) [INFO] [talledLocalContainer] at com.atlassian.util.concurrent.ResettableLazyReference$InternalReference.create(ResettableLazyReference.java:182) [INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference$Sync.run(LazyReference.java:325) [INFO] [talledLocalContainer] at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:143) [INFO] [talledLocalContainer] ... 381 more [INFO] [talledLocalContainer] Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.atlassian.jira.config.properties.ApplicationProperties] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301) [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047) [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942) [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) [INFO] [talledLocalContainer] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
com.atlassian.jira.config.properties.ApplicationProperties are not injected. What can I use instead of @ComponentImport?
How to resolve this?
Versions are provided in pom.xml
Community moderators have prevented the ability to post new answers.
@Autowired public IssueResponsiblePerson(@ComponentImport final CustomFieldValuePersister customFieldValuePersister, @ComponentImport final UserConverter userConverter, @ComponentImport final GenericConfigManager genericConfigManager, @JiraImport("com.atlassian.jira.config.properties.ApplicationProperties") final ApplicationProperties applicationProperties, @ComponentImport final JiraAuthenticationContext jiraAuthenticationContext, @ComponentImport final FieldConfigSchemeManager fieldConfigSchemeManager, @ComponentImport final ProjectManager projectManager, @ComponentImport final SoyTemplateRendererProvider soyTemplateRendererProvider, @ComponentImport final GroupManager groupManager, @ComponentImport final ProjectRoleManager projectRoleManager, @ComponentImport final UserSearchService userSearchService, @ComponentImport final JiraBaseUrls jiraBaseUrls, @ComponentImport final UserHistoryManager userHistoryManager, @ComponentImport final UserFilterManager userFilterManager, @ComponentImport final I18nHelper i18nHelper, @ComponentImport final UserBeanFactory userBeanFactory) { super(customFieldValuePersister, userConverter, genericConfigManager, applicationProperties, jiraAuthenticationContext, fieldConfigSchemeManager, projectManager, soyTemplateRendererProvider, groupManager, projectRoleManager, userSearchService, jiraBaseUrls, userHistoryManager, userFilterManager, i18nHelper, userBeanFactory); this.customFieldValuePersister = customFieldValuePersister; this.genericConfigManager = genericConfigManager; this.jiraAuthenticationContext = jiraAuthenticationContext; this.applicationProperties = applicationProperties; this.userConverter = userConverter; this.fieldConfigSchemeManager = fieldConfigSchemeManager; this.projectManager = projectManager; this.soyTemplateRendererProvider = soyTemplateRendererProvider; this.groupManager = groupManager; this.projectRoleManager = projectRoleManager; this.userSearchService = userSearchService; this.jiraBaseUrls = jiraBaseUrls; this.userHistoryManager = userHistoryManager; this.userFilterManager = userFilterManager; this.i18nHelper = i18nHelper; this.userBeanFactory = userBeanFactory; }
That worked for me
Hi Oleg,
All classes that are part of JIRA API including ApplicationProperties should be annotated with @Autowired.
@ComponentImport should used for for classes that come from other addons. Please see spring-scanner docs for more details.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
That didn't worked for me. In this case I've got
[INFO] [talledLocalContainer] com.atlassian.util.concurrent.LazyReference$InitializationException: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ru.some.jira.customfields.IssueResponsiblePerson': Unsatisfied dependency expressed through constructor argument with index 1 of type [com.atlassian.jira.issue.customfields.converters.UserConverter]: : No qualifying bean of type [com.atlassian.jira.issue.customfields.converters.UserConverter] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.atlassian.jira.issue.customfields.converters.UserConverter] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
Followed https://answers.atlassian.com/questions/32507480 answer.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.