Hi,

You can take a look on the karaf examples.

Basically, you have two options:

1. You create a feature containing your module/bundle and the dependency 
bundles, playing with import package
2. You create a uber bundle embedding the dependencies (private package or 
embed dependency)

The preferred approach is probably 1.

Regards
JB

> Le 22 août 2021 à 14:28, Xad Kile <xadk...@gmail.com> a écrit :
> 
> Hello,
> TLDR: What is the recommended way to deploy a module with dependencies?
> 
> I am new to Karaf, and haven't figured out the right way to deploy an 
> application on Karaf.
> 
> Generally an application consists of the application code and dependencies.
> 
> For application code, I think there's only one and reasonable way to deploy, 
> and that is: build the code into bundles and install the bundles (manually or 
> using karaf-maven-plugin)
> 
> For dependencies, there are more than one way to delivery dependencies into 
> Karaf:
> 
> Way 1: pack the dependencies into the application bundle by manually enter 
> the dependencies' packages into <Private-Package> / <Expport-Package> of 
> maven-bundle-plugin
>     Pros: only one file to install
>     Cons: I have to manually manage <Private-Package> / <Export-Package> 
> which is very error-prone. Also there is a huge risk of missing transitive 
> dependencies.
> 
> 
> Way 2: use <Embed-Dependency>, <Embed-Transitive> to included the 
> dependencies into the bundle jar.
>     Pros: less risky with transitive dependencies. I can control exposure of 
> the dependencies to other modules.
>     Cons: Still have to manually manage which dependencies to included, 
> decide which one is public, which one is private.
> 
> Way 3: create a kar file from the project, then install the kar
>     Pros: The process is mostly automatic
>     Cons: 
>         - All the dependencies are public and accessible to all modules
>         - I have two files two install for each module: a bundle file and a 
> kar file. 
>         - This still cannot handle transitive dependencies of very big 
> libraries such as Google Firebase SDK, but this is not a problem for the time 
> being.
> 
> Way 4: manually create a feature project to install bundles and features I 
> need.
> 
> Currently, I use:
> - "Way 4" to install globally-used dependencies (Apache common libraries, 
> jdbc, etc).
> - "Way 3" to install dependencies of a module that I might want to share with 
> other modules
> - "Way 2" to install private dependencies that I don't want to share with 
> other modules
> 
> I don't know if I am missing anything but this is a lot of work and 
> error-prone, anyone know a better way to do this? Something more automatic, 
> less manual, less typing.
> 
> Thank you,
> 
> Kile

Reply via email to