Điều đó xảy ra khi bạn cố gắng tiêm vào đối tượng của plugin của bạn một đối tượng khác của plugin và bạn làm như thể đối tượng khác là một plugin khác và được xuất dưới dạng dịch vụ OSGi công khai.
Trong JIRA, bạn có thể khai báo các lớp Java plugin của bạn thành các thành phần. Điều đó có nghĩa là việc khởi tạo và tiêm phụ thuộc (thông qua constructor chẳng hạn) sẽ được tự động ủy nhiệm trên Spring Framework, một phần của JIRA. Thông thường, chúng tôi làm điều này để mất sự quan tâm về sự phụ thuộc vào lớp học và sự kiện. Có hai loại thành phần, công khai và riêng tư. Các thành phần công khai sẽ có sẵn để nhập cho các plugin khác với của bạn. Các plugin khác có thể nhập chúng và sau đó sử dụng chúng thông qua tiêm phụ thuộc. Các thành phần riêng tư sẽ hoạt động giống như các thành phần công khai nhưng các plugin khác sẽ không thể nhập hoặc xem chúng.
Nếu bạn có một thành phần, nói A
, mà phụ thuộc vào một thành phần, B
, cả hai phần của plugin của bạn, bạn không nên nhập khẩu phần B
để sẵn sàng cho A
vì nó đã là một phần của plugin của bạn. Trước JIRA 7 để nhập thành phần bạn đã đặt trên atlassian-plugin.xml
thành phần <component-import>
. JIRA 7 trở đi bạn đặt @ComponentImport
trước tham số hàm tạo khi bạn thực hiện tiêm phụ thuộc thông qua hàm tạo.
Vì vậy, tôi nghĩ rằng những gì bạn đã làm sai là đặt <component-import>
trên một thành phần đến trực tiếp từ plugin của bạn thay vì có <component>
. Hoặc nếu bạn có phiên bản JIRA 7 trở lên, điều bạn đã làm sai là đặt @ComponentImport
trước một thành phần của plugin của riêng bạn và giải pháp sẽ xóa chú thích đó. Ít nhất điều cuối cùng này là trường hợp của tôi và loại bỏ các chú thích đó khỏi việc tiêm phụ thuộc của các thành phần đến từ cùng một plugin mà tôi đã làm cho nó hoạt động.
Dựa trên thực tế OP được sử dụng "xyz.classname" không rõ ràng, nhưng tính đến mùa xuân-scanner 2.x bạn * không * sử dụng @ComponentImport cho bất kỳ thứ gì trong cùng một gói, chỉ các dịch vụ bên ngoài ngữ cảnh của bạn. Đối với các thành phần của riêng bạn, bạn bỏ qua chú thích. Câu trả lời của jpllossa dưới đây có thể đúng. – Eddie