Как создать команду оболочки Karaf в проекте Gradle

#gradle #karaf

#gradle #karaf

Вопрос:

Я пытаюсь создать собственную команду оболочки Karaf, и я готов сделать это с помощью Gradle, потому что весь проект находится на Gradle.

Единственная соответствующая документация, которую я нашел на данный момент, находится здесь http://karaf.apache.org/manual/latest/#_shell_commands и в нем говорится

 See [examples/karaf-command-example] to add your own shell commands.
  

Примеры создаются с использованием MAVEN, и нет абсолютно никакого описания о том, какое волшебство там происходит и что должно появиться в результирующем пакете, чтобы я мог воспроизвести это в Gradle.

Может кто-нибудь рассказать, как добиться того же в проекте Gradle?
Как Karaf определяет, какие команды присутствуют в Bundle?

Ответ №1:

Со временем я не нашел, как сделать то же самое в gradle, но я наткнулся на решение, которое дает тот же результат — с использованием декларативных сервисов OSGI.

Более подробная информация здесь (ищите osgi.command.scope ):
http://blog.vogella.com/2016/09/26/configuring-osgi-declarative-services/

Вот пример кода, который позволяет запускать команду some:command с одним необязательным строковым параметром.

 package some.application;

import org.osgi.service.component.annotations.Component;

@Component(
    service=SomeCommand.class,
    property = {"osgi.command.scope=some", "osgi.command.function=command"}
)
public class SomeCommand {

    public void command() {
        System.out.println("SomeCommand: "   "<no args>");
    }

    public void command(String param) {
        System.out.println("SomeCommand: "   param);
    }
}