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 <http://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 
>> <mailto: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 
>>> <mailto: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 <mailto: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>
>  <x-msg://6/#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

Reply via email to