2016-08-10 3 views
5

Ich begann ein Jira Addon zu entwickeln, aber ich bekomme Fehler.OsgiPlugin - Plugin nie behoben Service Fehler

My latest ein, die ich nicht in der Lage bin zu beheben ist

[INFO] [talledLocalContainer] QuickReload - Plugin Installer ERROR [caposgi.factory.OsgiPlugin] Plugin 'xy' nie gelöst Service "& classname 'mit Filter' (& (objectClass = xy.classname) (objectClass = xy.classname)) '

Was läuft hier falsch?

Antwort

7

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.

+0

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

3

Ich hatte ein ähnliches Problem, als ich ein Plugin für Confluence v6.1.3 entwickelte. Ich habe von Atlassian Spring Scanner v1 nach v2 migriert. Nachdem Sie die Anweisungen in den Atlassian Spring Scanner v2 guide, dachte ich, es war gut zu gehen, aber diesen Fehler hatte:

[INFO] [talledLocalContainer] 2017.08.24 22: 54: 52.602 ERROR [localhost-Start-Stopp-1] [ plugin.osgi.factory.OsgiPlugin] logAndClearOustandingDependencies Plugin 'com.confluenceservice.confluence.plugin.page-viewed' nie aufgelöster Service '& pageViewedService' mit Filter '(& (objectClass = com.confluenceservice.confluence.plugin.PageViewedService) (objectClass = com.confluenceservice.confluence.plugin.PageViewedService))‘

die Ursache für diesen Fehler war die @ComponentImport PageViewedService service:

Das war ok in Spring Scanner v1, aber nicht in Frühling Scanner v2. Der Import wird nicht benötigt, da PageViewedService Teil meines Plugins ist.Ich musste PageManager importieren, da der Bereich außerhalb meines Plugins liegt. Die Lösung:

@Autowired 
public AlertUserMacro(PageViewedService service, @ComponentImport PageManager pageManager) { 
    //constructor 
} 

Hoffe, dass dies hilft.

+0

Vielen Dank für Frühling Scanner v2, ich ging grundsätzlich auf diesem eine falsche Atlassian API Docs. –

Verwandte Themen