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.
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