Felix Dependecy-Manager не создает GoGo-Command

Я пытаюсь создать GoGo-Shell-Command с помощью Felix-Dependency-Manager (версия 3.2.0) без аннотаций.

Насколько я понимаю, gogo-runtime использует шаблон whiteboard и сканирует сервисы со свойствами, используя ключи 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.

Я что-то здесь упускаю?

1 ответ

Решение

Прежде всего, ваше предположение о том, как зарегистрировать команды gogo, является правильным: используется шаблон доски, а свойства области действия и функции определяют команды.

Вы не опубликовали код для MyConsole, Содержит ли он метод с именем command? Если нет, то это может быть проблемой.

Другая потенциальная проблема может заключаться в том, что вы на самом деле не добавили Bundle-Activator линия в вашем манифесте.

Если это не так, используйте dm notavail Команда, чтобы увидеть, есть ли какие-либо незарегистрированные компоненты (из-за отсутствия зависимостей).

Другие вопросы по тегам