OsgiPlugin - 插件永远不会解决服务错误

问题描述 投票:7回答:2

我开始开发jira插件,但是我遇到了错误。

我最近的一个,我无法修复

[INFO] [talledLocalContainer] QuickReload - 插件安装程序错误[c.a.p.osgi.factory.OsgiPlugin]插件'xy'从未使用过滤器'解析服务'&classname'(&(objectClass = xy.classname)(objectClass = xy.classname))'

这里出了什么问题?

java jira jira-plugin
2个回答
12
投票

当您尝试将插件的另一个对象注入插件的对象时,就会发生这种情况,就像另一个对象是另一个不同的插件并导出为公共OSGi服务一样。

在JIRA中,您可以将插件Java类声明为组件。这意味着实例化和依赖注入(例如通过构造函数)将自动委托给作为JIRA一部分的Spring Framework。通常我们这样做会失去对实例化和类依赖性的关注。公共和私人有两种类型的组件。公共组件可用于导入不同于您的插件。其他插件可以导入它们,然后通过依赖注入使用它们。私有组件将与公共组件一样工作,但其他插件将无法导入或查看它们。

如果你有一个组件,比如A,它依赖于另一个组件,B,它们都是你的插件的一部分,你不应该导入组件B可用于A,因为它已经是你的插件的一部分。在JIRA 7之前导入一个组件,你放在atlassian-plugin.xml上一个<component-import>元素。 JIRA 7以后,当您通过构造函数执行依赖项注入时,将@ComponentImport放在构造函数参数之前。

所以我认为你做错了是把<component-import>放在一个直接来自你的插件而不是<component>的组件上。或者如果您有JIRA 7或更高版本,那么您错误的做法是将@ComponentImport放在您自己的插件的组件之前,解决方案就是删除该注释。至少最后一个是我的情况,并从相同的插件中删除了依赖注入来自同一个插件的组件的注释。


6
投票

当我为Confluence v6.1.3开发一个插件时遇到了类似的问题。我正在从Atlassian Spring Scanner v1迁移到v2。按照Atlassian Spring Scanner v2 guide中的说明操作后,我认为这样做很好但是有这个错误:

[INFO] [talledLocalContainer] 2017-08-24 22:54:52,602错误[localhost-startStop-1] [plugin.osgi.factory.OsgiPlugin] logAndClearOustandingDependencies插件'com.confluenceservice.confluence.plugin.page-seen'从未解决过service'&pageViewedService'with filter'(&(objectClass = com.confluenceservice.confluence.plugin.PageViewedService)(objectClass = com.confluenceservice.confluence.plugin.PageViewedService))'

这个错误的原因是@ComponentImport PageViewedService service

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

这在Spring Scanner v1中是可以的,但在Spring Scanner v2中没有。因为PageViewedService是我的插件的一部分,所以不需要导入。我需要导入PageManager,因为它的范围超出了我的插件。解决方案:

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

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.