Я хотел бы создать инструмент командной строки, который запускает среду OSGi, чтобы повторно использовать код, который опирается на OSGi.
В ответе доступ к аргументам командной строки из пакета OSGi , я понял, как я могу прочитать аргументы командной строки:
@Component
public class Example {
String[] args;
@Activate
void activate() {
System.out.println("Hello World");
System.out.println(args.length + " args:");
for (String s : args) {
System.out.println(" - " + s);
}
}
@Reference(target = "(launcher.arguments=*)")
void args(Object object, Map<String, Object> map) {
if (map.containsKey("launcher.arguments")) {
args = (String[]) map.get("launcher.arguments");
} else {
args = new String[] {};
}
}
}
Но теперь, когда я запускаю собранный jar (bnd-export-maven-plugin
), вот так:
java -jar <path-to>/application.jar lorem ipsum
I получить ожидаемый результат, но приложение не завершает работу.
Прочитав 4.2.6 Остановка фреймворка , я подумал, что мне нужно вызвать stop()
в системном комплекте. Я попытался изменить свой код на:
@Activate
void activate(BundleContext bundleContext) {
System.out.println("Hello World");
System.out.println(args.length + " args:");
for (String s : args) {
System.out.println(" - " + s);
}
try {
bundleContext.getBundle().stop();
} catch (BundleException e) {
e.printStackTrace();
}
}
Но, похоже, он не работает так.