Hi again.
All my bundles that have commands don't include any classes from karaf.
Maybe the instructions you have in the apache maven bundle plugin are
importing additional stuff?
You can find in here an example of a karaf command with the pom used to
build it:
https://github.com/jassuncao/osgi-utils/tree/master/config-extras

Regards,
João

On Fri, Apr 18, 2025 at 7:28 AM Ephemeris Lappis <ephemeris.lap...@gmail.com>
wrote:

> 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>
>>
>>
>>

Reply via email to