Hello again. I see that the karaf plugin adds the manifest entry with the package that contains my command, but also generates and adds classes as you can see in the screenshot.
[image: image.png] Do you mean that this is not needed for shell commands processing at runtime ? Thanks again. Regards. Le ven. 18 avr. 2025 à 01:04, Matt Pavlovich <mattr...@apache.org> a écrit : > I only add the Karaf-Commands instruction using the bundle plugin > > On Apr 17, 2025, at 5:14 PM, Ephemeris Lappis <ephemeris.lap...@gmail.com> > wrote: > > Hello João and Matt. > > > Indeed, after taking a closer look at the custom command example command, > it seems simpler to use the Karaf API than the OSGi API and SCR. Since my > last post, I've successfully built and deployed a simple command using the > "karaf-services-maven-plugin" to generate the additional entries in the > bundle manifest. However, I had to add an "execution" to the plugin, > whereas the example doesn't, because without it, the plugin isn't triggered > at the expected maven phase. I see that you directly add "Karaf-Commands:*" > to the bundle build configuration. Is this sufficient, and is it a good > practice ? > > In any case, there's no need to add any additional features like SCR to > mine. > > Thank you very much. > > > Ephemeris Lappis > > Le 17/04/2025 à 18:52, João Assunção a écrit : > > I checked, and the annotations package are not required during runtime. If > I use the headers command to list the packages required by a bundle where > SCR components are used, the package > "org.osgi.service.component.annotations" is not required. > In the previous email I forgot to mention that I install the scr feature. > For karaf shell commands, I don't use SCR. I use Karaf's API for commands. > Follow a simple command using a service provided by an SCR component. For > the command to be recognized by Karaf it is necessary to include a header > "Karaf-Commands:*"in the bundle manifest. I use bnd-maven-plugin to build > my bundles > > import org.apache.karaf.shell.api.action.Action; >> import org.apache.karaf.shell.api.action.Argument; >> import org.apache.karaf.shell.api.action.Command; >> import org.apache.karaf.shell.api.action.lifecycle.Reference; >> import org.apache.karaf.shell.api.action.lifecycle.Service; >> >> import com.atobe.ort.photo.repository.PhotoRepositoryService; >> >> @Command(scope = "photorepo", name = "purge", description = "Purge") >> @Service >> public class PurgeCommand implements Action { >> >> @Reference >> PhotoRepositoryService repositoryService; >> >> @Argument(index = 0, name = "days", description = "Days", multiValued >> = false, required = true) >> Integer days; >> >> @Override >> public Object execute() throws Exception { >> >> Duration age = Duration.ofDays(days); >> repositoryService.purgePhotos(age); >> return null; >> } >> >> } > > > The corresponding "bnd.bnd" file: > >> Bundle-Name: ${project.name} >> Bundle-Description: ${project.description} >> Karaf-Commands:* > > > > Best regards, > João > > > > On Thu, Apr 17, 2025 at 4:41 PM Ephemeris Lappis < > ephemeris.lap...@gmail.com> wrote: > >> Hello João ! >> >> First, thanks for your answer. >> >> I see your dependency as "provided", so I suppose that you assume that >> classes are exported by some bundle. In my case I didn't find any standard >> feature with a bundle that exports the required annotations packages. What >> did you do to get them at runtime ? >> >> As I aim to provide custom shell commands, I'd initially prefer to use a >> basic OSGi design, and using annotations, and. with the SCR files being >> generated by the bundle plugin. >> >> An alternate solution could be using Karaf packages, as described in >> these examples ( >> https://github.com/apache/karaf/blob/main/examples/karaf-command-example/karaf-command-example-command/src/main/java/org/apache/karaf/examples/command/command/AddCommand.java >> ). >> >> But this also fails : my custom command is not correctly detected and >> installed. >> >> An idea of the best way to do that ? >> >> Thanks again. >> >> Regards. >> >> Le jeu. 17 avr. 2025 à 13:47, João Assunção <joao.assun...@exploitsys.com> >> a écrit : >> >>> Hi, >>> I'm almost sure the annotations are not needed during execution. During >>> runtime, SCR uses the XML files included inside the bundle (jar). >>> The bundle plugin uses the annotation in the classes to generate those >>> xml descriptors. >>> In my maven projects, I normally use the "bom" dependency provided by >>> karaf to ensure I'm using the same dependencies used by Karaf. For example: >>> >>>> <dependency> >>>> <groupId>org.apache.karaf</groupId> >>>> <artifactId>karaf-bom</artifactId> >>>> <version>${karaf.version}</version> >>>> <type>pom</type> >>>> <scope>import</scope> >>>> </dependency> >>> >>> >>> But for my convenience, I tend to use the Enroute dependency: >>> <dependency> >>> <groupId>org.osgi.enroute</groupId> >>> <artifactId>osgi-api</artifactId> >>> <version>7.0.0</version> >>> <type>pom</type> >>> <scope>provided</scope> >>> >>>> </dependency> >>> >>> >>> Best regards, >>> João >>> >>> >>> >>> >>> >>> On Thu, Apr 17, 2025 at 11:50 AM Ephemeris Lappis < >>> ephemeris.lap...@gmail.com> wrote: >>> >>>> Hello. >>>> >>>> I can't find if a Karaf feature exists to provide the annotations for >>>> SCR, such as Service, Reference, etc. >>>> >>>> Installing the feature "scr" just adds bundles to manage the runtime, >>>> not the annotations. >>>> >>>> Perhaps the packages are provided by a Compendium bundle. >>>> >>>> Is there a provided feature that includes them, or do we have to add >>>> explicitly bundles for that ? In this case, what is the right version to >>>> match the OSGi framework of Karaf 4.4.x ? >>>> >>>> Thanks for your help. >>>> >>>> Regards. >>>> >>> > > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> > Sans > virus.www.avast.com > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> > > >