OsgiPlugin - 插件从未解决服务错误
OsgiPlugin - Plugin never resolved service error
我开始开发 jira 插件,但出现错误。
我无法修复的最新问题是
[INFO] [talledLocalContainer] QuickReload - 插件安装程序错误 [c.a.p.osgi.factory.OsgiPlugin] 插件 'xy' 从未使用过滤器解析服务 '&classname' (&(objectClass=xy.classname)(objectClass=xy.classname))'
这里出了什么问题?
当您尝试在插件的一个对象上注入插件的另一个对象时,就会发生这种情况,就像另一个对象属于另一个不同的插件并导出为 public OSGi 服务一样。
在 JIRA 中,您可以将插件 Java class 声明为组件。这意味着实例化和依赖注入(例如通过构造函数)将自动委托给作为 JIRA 一部分的 Spring 框架。通常我们这样做是为了不关心实例化和 class 依赖关系。组件有两种类型,public 和私有。 Public 组件将可用于导入不同于您的插件的插件。其他插件可以导入它们,然后通过依赖注入来使用它们。私有组件将与 public 一样工作,但其他插件将无法导入或查看它们。
如果你有一个组件,比如 A
,它依赖于另一个组件,B
,它们都是你的插件的一部分,你不应该导入组件 B
可用于 A
,因为它已经是您插件的一部分。在用于导入组件的 JIRA 7 之前,您在 atlassian-plugin.xml
上放置了一个 <component-import>
元素。从 JIRA 7 开始,当您通过构造函数进行依赖注入时,您将 @ComponentImport
放在构造函数参数之前。
所以我认为您做错的是将 <component-import>
放在直接来自您的插件的组件上,而不是 <component>
。或者,如果您有 JIRA 7 或更高版本,您做错的是将 @ComponentImport
放在您自己的插件的组件之前,解决方案是删除该注释。至少最后一个是我的情况,并且从来自我让它工作的同一个插件的组件的依赖注入中删除了注释。
我在为Confluence v6.1.3 开发插件时遇到过类似的问题。我正在从 Atlassian Spring Scanner v1 迁移到 v2。按照 Atlassian Spring Scanner v2 guide 中的说明进行操作后,我认为可以开始了,但遇到了这个错误:
[信息] [talledLocalContainer] 2017-08-24 22:54:52,602 错误 [localhost-startStop-1] [plugin.osgi.factory.OsgiPlugin] logAndClearOustandingDependencies 插件 'com.confluenceservice.confluence.plugin.page-viewed'从未使用过滤器'(&(objectClass=com.confluenceservice.confluence.plugin.PageViewedService)(objectClass=com.confluenceservice.confluence.plugin.PageViewedService))'
解决服务'&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
}
希望这对您有所帮助。
我开始开发 jira 插件,但出现错误。
我无法修复的最新问题是
[INFO] [talledLocalContainer] QuickReload - 插件安装程序错误 [c.a.p.osgi.factory.OsgiPlugin] 插件 'xy' 从未使用过滤器解析服务 '&classname' (&(objectClass=xy.classname)(objectClass=xy.classname))'
这里出了什么问题?
当您尝试在插件的一个对象上注入插件的另一个对象时,就会发生这种情况,就像另一个对象属于另一个不同的插件并导出为 public OSGi 服务一样。
在 JIRA 中,您可以将插件 Java class 声明为组件。这意味着实例化和依赖注入(例如通过构造函数)将自动委托给作为 JIRA 一部分的 Spring 框架。通常我们这样做是为了不关心实例化和 class 依赖关系。组件有两种类型,public 和私有。 Public 组件将可用于导入不同于您的插件的插件。其他插件可以导入它们,然后通过依赖注入来使用它们。私有组件将与 public 一样工作,但其他插件将无法导入或查看它们。
如果你有一个组件,比如 A
,它依赖于另一个组件,B
,它们都是你的插件的一部分,你不应该导入组件 B
可用于 A
,因为它已经是您插件的一部分。在用于导入组件的 JIRA 7 之前,您在 atlassian-plugin.xml
上放置了一个 <component-import>
元素。从 JIRA 7 开始,当您通过构造函数进行依赖注入时,您将 @ComponentImport
放在构造函数参数之前。
所以我认为您做错的是将 <component-import>
放在直接来自您的插件的组件上,而不是 <component>
。或者,如果您有 JIRA 7 或更高版本,您做错的是将 @ComponentImport
放在您自己的插件的组件之前,解决方案是删除该注释。至少最后一个是我的情况,并且从来自我让它工作的同一个插件的组件的依赖注入中删除了注释。
我在为Confluence v6.1.3 开发插件时遇到过类似的问题。我正在从 Atlassian Spring Scanner v1 迁移到 v2。按照 Atlassian Spring Scanner v2 guide 中的说明进行操作后,我认为可以开始了,但遇到了这个错误:
[信息] [talledLocalContainer] 2017-08-24 22:54:52,602 错误 [localhost-startStop-1] [plugin.osgi.factory.OsgiPlugin] logAndClearOustandingDependencies 插件 'com.confluenceservice.confluence.plugin.page-viewed'从未使用过滤器'(&(objectClass=com.confluenceservice.confluence.plugin.PageViewedService)(objectClass=com.confluenceservice.confluence.plugin.PageViewedService))'
解决服务'&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
}
希望这对您有所帮助。