我正在尝试使用没有注释的Felix-Dependency-Manager(版本3.2.0)创建GoGo-Shell-Command。
据我了解,gogo-runtime使用whiteboard-pattern并使用Command CommandProcessor.COMMAND_SCOPE和CommandProcessor.COMMAND_FUNCTION键扫描带有Properties的服务。
在我的情况下,捆绑包已启动,服务已使用正确的属性注册,但我的命令未列在" help"当我试着打电话时它也不起作用。
以下代码在BundleActivator(DependencyActivatorBase)中注册服务:
Properties props = new Properties();
props.put(CommandProcessor.COMMAND_SCOPE, "test");
props.put(CommandProcessor.FUNCTION_SCOPE, new String[] {"command"});
manager.add(createComponent()
.setInterface(Object.class.getName(), props)
.setImplementation(MyConsole.class)
.add(createServiceDependency()
.setService(MyService.class)));
运行我的代码时,lb-Command列出了以下软件包。
org.apache.felix.gogo.command
org.apache.felix.gogo.runtime
org.apache.felix.gogo.shell
org.apache.felix.dependencymanager
org.apache.felix.dependencymanager.shell
mybundle.service
mybundle.api
mybundle.console
使用BndTools完成开发。
我在这里错过了什么吗?
答案 0 :(得分:1)
首先,您对如何注册gogo命令的假设是正确的:使用白板模式,范围和功能属性决定命令。
您没有发布MyConsole
的代码。它实际上是否包含一个名为command
的方法?如果没有,那可能就是问题所在。
另一个潜在的问题可能是您实际上没有在清单中添加Bundle-Activator
行。
如果不是这样,请使用dm notavail
命令查看是否存在任何未注册的组件(因为缺少依赖项)。