2016-08-10 10 views
5

Zacząłem rozwijać dodatek jira, ale dostaję błędy.OsgiPlugin - Plugin nigdy nie rozwiązany błąd usługi

Mój ostatni z nich, które jestem w stanie naprawić to

[INFO] [talledLocalContainer] QuickReload - Plugin Installer ERROR [caposgi.factory.OsgiPlugin] Plugin 'xy' nigdy rozwiązany usługi "& classname "with filter" (& (objectClass = xy.classname) (objectClass = xy.classname)) '

Co się tutaj dzieje?

Odpowiedz

7

To się dzieje, gdy próbujesz wstrzyknąć obiekt swojej wtyczki innym obiektem wtyczki i robisz to tak, jakby inny obiekt był innej innej wtyczki i został wyeksportowany jako publiczna usługa OSGi.

W JIRA można zadeklarować swoje klasy Java wtyczki jako składniki. Oznacza to, że wstawienie instancji i zależności (na przykład przez konstruktora) zostanie automatycznie delegowane na Spring Framework, który jest częścią JIRA. Zwykle robimy to, aby zatroszczyć się o instancję i zależności klasowe. Istnieją dwa rodzaje komponentów, publiczny i prywatny. Komponenty publiczne będą dostępne do importowania dla różnych wtyczek niż Twoje. Inne wtyczki mogą je importować, a następnie wykorzystywać je poprzez wtrysk zależności. Komponenty prywatne będą działać tak samo jak publiczne, ale inne wtyczki nie będą mogły ich importować ani wyświetlać.

Jeśli masz jeden składnik, powiedzmy A, która zależy od innego składnika, B, obaj częścią wtyczki, nie należy importować składnik B być dostępne dla A ponieważ jest już częścią wtyczki. Przed wersją JIRA 7 do importowania komponentu umieszczonego na elemencie atlassian-plugin.xml a <component-import>. JIRA 7 i później wstawiasz @ComponentImport przed parametrem konstruktora, gdy wykonywany jest zastrzyk zależności przez konstruktor.

Więc myślę, że źle zrobiłeś, aby umieścić <component-import> na komponencie, który pochodzi bezpośrednio z twojej wtyczki, zamiast mieć <component>. Lub jeśli masz JIRA 7 lub nowszą wersję, co zrobiłeś źle, było wstawienie @ComponentImport przed komponentem własnej wtyczki i rozwiązaniem byłoby usunięcie tej adnotacji. Przynajmniej ten ostatni przypadek był moim przypadkiem i usunięcie tych adnotacji z zależnego wtrysku składników pochodzących z tej samej wtyczki, z której zrobiłem to do pracy.

+0

W oparciu o fakt, że OP używał "xyz.classname", jest niejasny, ale od wiosny-skanera 2.x nie * używasz @ ComponentImport do niczego w tym samym pakiecie, tylko usługi zewnętrzne do twojego kontekstu. W przypadku własnych komponentów pominięto adnotację. Odpowiedź poniżej jpllossy jest prawdopodobnie poprawna. – Eddie

3

Miał podobny problem, jak podczas opracowywania wtyczki do Confluence v6.1.3. Miałem migrację z Atlassian Spring Scanner v1 do v2. Po wykonaniu instrukcji w Atlassian Spring Scanner v2 guide, myślałem, że to było dobre, aby przejść, ale miał taki błąd:

[INFO] [talledLocalContainer] 24.08.2017 22: 54: 52.602 ERROR [localhost-STARTSTOP-1] [ plugin.osgi.factory.OsgiPlugin] logAndClearOustandingDependencies Plugin "com.confluenceservice.confluence.plugin.page-wyświetlono" usługa nigdy nie rozwiązana "& pageViewedService" z filtrem "(& (objectClass = com.confluenceservice.confluence.plugin.PageViewedService) (objectClass = com.confluenceservice.confluence.plugin.PageViewedService))”

przyczyną tego błędu był @ComponentImport PageViewedService service:

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

To było dobrze w Spring Scanner v1, ale nie w Spring Scanner v2. Import nie jest potrzebny, ponieważ PageViewedService jest częścią mojej wtyczki.Musiałem zaimportować PageManager, ponieważ jego zasięg wykracza poza moją wtyczkę. Rozwiązanie:

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

Mam nadzieję, że to pomoże.

+0

Dzięki za skaner wiosenny v2, w zasadzie poszedłem w tym kierunku w niewłaściwym kierunku z powodu dokumentów Atlassian API. –

Powiązane problemy