0

我正在尝试使用不带注释的 Felix-Dependency-Manager(版本 3.2.0)创建 GoGo-Shell-Command。

据我了解,gogo-runtime 使用白板模式并使用键 CommandProcessor.COMMAND_SCOPE 和 CommandProcessor.COMMAND_FUNCTION 扫描具有属性的服务。

就我而言,捆绑包已启动,服务已使用正确的属性注册,但我的命令未列在“帮助”下,当我尝试调用它时它也不起作用。

以下代码在 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 完成开发。

我在这里错过了什么吗?

4

1 回答 1

1

首先,您关于如何注册 gogo 命令的假设是正确的:使用白板模式并且范围和功能属性确定命令。

您没有发布MyConsole. 它实际上是否包含一个名为的方法command?如果不是,那可能就是问题所在。

另一个潜在的问题可能是您实际上没有Bundle-Activator在清单中添加一行。

如果不是这样,使用dm notavail命令查看是否有任何未注册的组件(因为缺少依赖项)。

于 2015-02-24T16:50:29.683 回答