2016-08-10 62 views
5

Tôi bắt đầu phát triển một addon jira, nhưng tôi nhận được lỗi.OsgiPlugin - Plugin không bao giờ giải quyết lỗi dịch vụ

mới nhất một, mà tôi không thể sửa chữa của tôi là

[INFO] [talledLocalContainer] QuickReload - Plugin Installer ERROR [caposgi.factory.OsgiPlugin] Plugin 'xy' không bao giờ giải quyết vụ '& classname 'có bộ lọc' (& (objectClass = xy.classname) (objectClass = xy.classname)) '

Điều gì xảy ra ở đây?

Trả lời

7

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

+0

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

3

Đã xảy ra sự cố tương tự như thế này khi tôi phát triển plugin cho Confluence v6.1.3. Tôi đã di chuyển từ Atlassian Spring Scanner v1 sang v2. Sau khi làm theo các hướng dẫn trong Atlassian Spring Scanner v2 guide, tôi nghĩ rằng nó là tốt để đi nhưng có lỗi này:

[INFO] [talledLocalContainer] 2017/08/24 22: 54: 52.602 ERROR [localhost-startStop-1] [ plugin.osgi.factory.OsgiPlugin] logAndClearOustandingDependencies Plugin 'com.confluenceservice.confluence.plugin.page-viewed' không bao giờ giải quyết dịch vụ '& pageViewedService' với bộ lọc '(& (objectClass = com.confluenceservice.confluence.plugin.PageViewedService) (objectClass = com.confluenceservice.confluence.plugin.PageViewedService)) '

Nguyên nhân gây ra lỗi này là @ComponentImport PageViewedService service:

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

Điều này đã ổn trong Spring Scanner v1 nhưng không có trong Spring Scanner v2. Không cần nhập vì PageViewedService là một phần của plugin của tôi.Tôi cần nhập PageManager vì phạm vi của nó nằm ngoài plugin của tôi. Giải pháp:

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

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn bạn đã quét mùa xuân v2, về cơ bản tôi đã đi sai hướng trên trang này vì tài liệu API Atlassian. –

Các vấn đề liên quan