From my experience using Karaf 4.2.9 I found the following is needed in POM, or
inherited POM.
</build>
</pluginManagement>
</plugins>
<plugin>
<groupId>org.apache.karaf.tooling</groupId>
<artifactId>karaf-services-maven-plugin</artifactId>
<version>4.2.9</version>
<executions>
<execution>
<id>service-metadata-generate</id>
<phase>process-classes</phase>
<goals>
<goal>service-metadata-generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
Section 3.2 of the Karaf documentation,
http://karaf.apache.org/manual/latest/#_commands, contains the following, but
nowhere mentions the configuration for the goal service-metadata-generate.
> However, in Karaf 4.x, you can use DS and new annotations and avoid the usage
> of a blueprint XML.
>
> The new annotations are available: @Service, @Completion, @Parsing,
> @Reference. It allows you to completely define the command in the command
> class directly.
>
> To simplify the generation of the code and OSGi headers, Karaf 4.x provides
> the karaf-services-maven-plugin (in org.apache.karaf.tooling Maven groupId).
>
> Take a look in the developer guide for the command development "new style"
> details.
When looking through the examples in the source, you find the configuration in
the buried in Karaf's root pom,
https://github.com/apache/karaf/blob/master/pom.xml#L2054
I would expect the following:
- Section on karaf-services-maven-plugin in the Developer section of the Karaf
documentation
- Reference to karaf-services-maven-plugin in the appropriate example code
documentation
https://github.com/apache/karaf/tree/master/examples/karaf-command-example
Paul Spencer
> On Jan 25, 2020, at 1:30 PM, [email protected] wrote:
>
> Hi
>
> Do you have the karaf service plugin in your pom ?
> It's this plugin which converts annotations to services.
> Take a look on the karaf-command-example.
>
> Regards
> JB
>
> Le 25 janv. 2020 18:55, Steinar Bang <[email protected]> a écrit :
> What's needed to make karaf pick up a command?
>
>
> Is it enough to annotate a class implementing the Action interface and
> annotate it with the @Command and @Service annotations, and then load
> the bundle that contains the class?
>
> Or are there special considerations to make:
> The class should not reside in a bundle that does other things commands?
>
> The package containing the classes should be exported from the bundle?
>
> The command classes should be mentioned in the manifest?
>
> Should the command classes be handled specially in the karaf feature file?
>
> I think at some point this command worked, but it is no longer available
> even when the bundle that contains the command is loaded:
> https://github.com/steinarb/ukelonn/blob/master/ukelonn.backend/src/main/java/no/priv/bang/ukelonn/backend/KarafRele
> aseLiquibaseLockCommand.java#L30
>
> Can anyone spot what might be wrong? (I haven't done anything special
> except for adding the class to a bundle that is loaded by a feature and
> start a DS component)
>
> Thanks!
>