Я не уверен, что вам нужно больше использовать подкласс Command ( эта страница выглядит очень старой), я думаю, что это должно сработать, просто зарегистрировав службу с двумя конкретными свойствами:
- Свойство области действия «osgi.command.scope» (которое, по сути, предоставляет пространство имен в случае, если имена ваших команд совпадают с именами, предоставленными другим.
- Строковый массив "osgi.command.function" с именами ваших методов, действующих как команды
Таким образом, вашим командам не нужно ничего знать о OSGi. Вы используете потоки печати обычным способом (они перенаправляются оболочкой)
* 1013 Е.Г. *
@ServiceProperty(name = "osgi.command.scope", value = "mycommands")
@ServiceProperty(name = "osgi.command.function", value = {"execute", "add"})
@Component(immediate = true)
@Provides
public class SampleCommand implements MyOwnCommand {
@Override
public void execute(String line) {
System.out.println("execute testcmd! with line: " + line);
}
@Override
public void add(int a, int b) {
System.out.println(a + "+" + b + "=" + (a+b));
}
}
Единственная цена, которую вы платите за это, - это потеря функциональности справки и использования.