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もう 1 つの潜在的な問題は、マニフェストに実際に行を追加していないことです。

そうでない場合は、dm notavailコマンドを使用して、登録されていないコンポーネントがあるかどうかを確認します (依存関係がないため)。

于 2015-02-24T16:50:29.683 に答える