Das passiert, wenn Sie versuchen, auf ein Objekt Ihres Plugins ein anderes Objekt Ihres Plugins zu injizieren, und Sie tun es, als wäre das andere Objekt von einem anderen Plugin und wurde als öffentlicher OSGi-Dienst exportiert.
In JIRA können Sie Ihre Java-Plug-in-Klassen als Komponenten deklarieren. Das bedeutet, dass die Instanziierung und Abhängigkeitsinjektion (z. B. über Konstruktor) automatisch an das Spring Framework, das Teil von JIRA ist, delegiert wird. Normalerweise tun wir dies, um die Instanziierung und Klassenabhängigkeiten zu vernachlässigen. Es gibt zwei Arten von Komponenten, öffentliche und private. Öffentliche Komponenten können für andere Plugins als Ihre eigenen importiert werden. Andere Plugins können sie importieren und sie dann über die Abhängigkeitsinjektion verwenden. Private Komponenten funktionieren genauso wie öffentliche, aber andere Plugins können sie nicht importieren oder sehen.
Wenn Sie eine Komponente haben, sagen A
, die auf einer anderen Komponente abhängt, B
, beide Teil des Plugin, sollten Sie nicht importieren Komponente B
für A
verfügbar sein, weil es bereits Teil Ihres Plugins ist. Vor JIRA 7 zum Importieren einer Komponente, die Sie auf das atlassian-plugin.xml
a <component-import>
Element platziert haben. Ab JIRA 7 setzen Sie @ComponentImport
vor dem Konstruktorparameter, wenn Sie die Abhängigkeitsinjektion über Konstruktor durchführen.
Also ich denke, was Sie falsch gemacht haben, war <component-import>
auf eine Komponente setzen, die direkt von Ihrem Plugin kommt anstatt <component>
. Oder wenn Sie JIRA 7 oder eine spätere Version haben, was Sie falsch gemacht haben, war @ComponentImport
vor eine Komponente Ihres eigenen Plugins zu setzen und die Lösung wäre, diese Annotation zu entfernen. Zumindest dieses letzte war mein Fall und das Entfernen dieser Annotationen aus der Abhängigkeitsinjektion von Komponenten, die von demselben Plugin stammen, habe ich zum Funktionieren gebracht.
Basierend auf der Tatsache, dass das OP "xyz.classname" verwendet, ist es unklar, aber ab Frühling-Scanner 2.x * @ * verwenden Sie nicht @ComponentImport für etwas innerhalb des gleichen Bundles, nur Dienstleistungen außerhalb Ihres Kontexts. Für Ihre eigenen Komponenten verzichten Sie auf die Annotation. Daher ist die Antwort von jpllossa wahrscheinlich richtig. – Eddie