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
Команда, чтобы увидеть, есть ли какие-либо незарегистрированные компоненты (из-за отсутствия зависимостей).