Hello

Thanks JBO for the idea. True - custom distro generation isn't that
intuitive as it could be. Personally I missed the flexibility, not
simplicity, that's why I added <framework>custom</framework> in
"[KARAF-5468] Cleaning up AssemblyMojo, Profiles and profile Builder".

Without it, the implied value for "framework" property was "framework" or
"static-framework" depending on whether you had dependency on
mvn:org.apache.karaf.features/framework/VERSION/kar or
mvn:org.apache.karaf.features/static/VERSION/kar in your POM. The
discovered "framework" property was added as "startup feature" which was
very confusing (mixing "framework" and "feature" concepts).

I can't tell much about improvements for
karaf-maven-plugin:features-generate-descriptor, because I always preferred
manual creation of feature XMLs.

However having dependency on existing karaf distro ("standard" apache-karaf
or apache-karaf-minimal) is good idea! karaf-maven-plugin:assembly could
search zip or tar.gz or tgz kind of dependencies (with "provided" or any
other scope) and:
 - unpack it
 - check etc/profile.cfg

etc/profile.cfg is (since 4.2.0) nicely written as (official
apache-karaf-minimal distro):

#
# Profile generated by Karaf Assembly Builder
#

# Parent profiles
attribute.parents = generated-startup generated-boot generated-installed

# Attributes
attribute.overlay = true

# Feature XML repositories
repository.mvn\:org.apache.karaf.features/framework/4.2.0/xml/features =
mvn:org.apache.karaf.features/framework/4.2.0/xml/features
repository.mvn\:org.apache.karaf.features/standard/4.2.0/xml/features =
mvn:org.apache.karaf.features/standard/4.2.0/xml/features
repository.mvn\:org.apache.karaf.features/spring/4.2.0/xml/features =
mvn:org.apache.karaf.features/spring/4.2.0/xml/features

# Features
feature.framework = framework
feature.jaas = jaas
feature.shell = shell
feature.feature = feature
feature.ssh = ssh
feature.bundle = bundle
feature.config = config
feature.log = log

However, with complex distros it can look like this (my distro) - see all
the blacklisted items and even special configuration options - these are
all generated from pom.xml:

#
# Profile generated by Karaf Assembly Builder
#

# Parent profiles
attribute.parents = generated-startup generated-boot generated-installed

# Attributes
attribute.overlay = true

# Feature XML repositories
repository.mvn\:org.apache.karaf.features/framework/4.2.0/xml/features =
mvn:org.apache.karaf.features/framework/4.2.0/xml/features
...
# Features
feature.framework = framework
feature.patch-management = patch-management
...
feature.pax-jms-config = pax-jms-config
feature.pax-jms-pool-narayana = pax-jms-pool-narayana
feature.pax-jms-pool-transx = pax-jms-pool-transx

# Bundles
...
bundle.mvn\:org.bouncycastle/bcprov-jdk15on/1.60 =
mvn:org.bouncycastle/bcprov-jdk15on/1.60
bundle.mvn\:org.bouncycastle/bcpkix-jdk15on/1.60 =
mvn:org.bouncycastle/bcpkix-jdk15on/1.60

# Configuration properties for etc/config.properties
config.karaf.delay.console = true

# Blacklisted repositories
blacklisted.repository.mvn\:org.ops4j.pax.cdi/pax-cdi-features/1.0.0.RC1/xml/features
= mvn:org.ops4j.pax.cdi/pax-cdi-features/1.0.0.RC1/xml/features
...

# Blacklisted features
blacklisted.feature.httplite = httplite
blacklisted.feature.jetty/[8,9) = jetty/[8,9)
blacklisted.feature.pax-*jetty* = pax-*jetty*
blacklisted.feature.cxf-*-jetty = cxf-*-jetty
...

# Blacklisted bundles
blacklisted.bundle.mvn\:org.ops4j.pax.cdi/pax-cdi-jetty-weld =
mvn:org.ops4j.pax.cdi/pax-cdi-jetty-weld

This etc/profile.cfg can be treated simply as it was added in
karaf-maven-plugin:assembly configuration itself!

<configuration>
    <profilesUris>
        <uri>path/to/profile.cfg</uri>
    </profilesUris>
</configuration>

best regards
Grzegorz Grzybek

czw., 13 wrz 2018 o 13:51 Jean-Baptiste Onofré <j...@nanthrax.net> napisał(a):

> Hi guys,
>
> Recently, we received a lot of questions around how to create Karaf
> custom distribution based on karaf-maven-plugin, and how to use the
> static profile to create "standalone/static" distribution.
>
> If the plugin works fine, it's not easy to understand some "details",
> like the dependency scope impact, or providing the set of default
> features repos and features. I already helped users (in private
> communication) to fix their custom distributions.
>
> Obviously, we should simplify the way of creating custom distribution,
> especially with the new tooling & feature we now provide around Docker.
>
> I would like to propose the following:
>
> 1. Set the default behavior of the assembly goal to create a custom
> distribution based on standard. For the user, instead of providing
> (again) all framework, standard, enterprise features repos and all
> standard boot features (shell, ...), it will just specify the tar.gz/zip
> base and his own features repo/repos (or the goal will use the same
> version of the goal plugin itself). All the rest will be done by the
> plugin for him. Use the karaf packaging as default to define this. At
> the end of the day, the user pom.xml will look like:
>
> <project>
>         <groupId>foo</groupId>
>         <artifactId>bar</artifactId>
>         <version>1.0-SNAPSHOT</version>
>         <packaging>karaf</packaging>
>
>         <dependencies>
>                 <dependency>
>                         <groupId>org.apache.karaf</groupId>
>                         <artifactId>apache-karaf</artifactId>
>                         <version>4.2.1</version>
>                         <type>tar.gz</type>
>                 </dependency>
>                 <dependency>
>                         <groupId>foo</groupId>
>                         <artifactId>my</artifactId>
>                         <version>1.0-SNAPSHOT</version>
>                         <classifier>features</classifier>
>                         <type>xml</type>
>                 </dependency>
>         </dependencies>
>
>         <build>
>                 <plugins>
>                         <plugin>
>                                 <groupId>org.apache.karaf.tooling</groupId>
> <artifactId>karaf-maven-plugin</artifactId>
> <extensions>true</extensions>
> <inherited>true</inherited>
> <configuration>
> <bootFeatures>
>         <feature>my</feature>
> </bootFeatures>
> <installedFeatures>
>         <feature>my-other</feature>
> </installedFeatures>
> </configuration>
>                         </plugin>
>                 </plugins>
>         </build>
>
> </project>
>
> The idea is to automatically execute install-kar + assembly for the
> karaf packaging and let the user focus on its own resources (features,
> config, ...) just providing the base Karaf archive.
> The user will be able to use src/main/resources to provide any files in
> etc, bin, or whatever in the resulting custom distribution.
>
> 2. Improve a bit the features XML generation
> If the custom distribution is the highest priority, just after the
> improvements on this area, I would like to improve the way of creating
> features XML.
> Now, to be honest, almost all of us write features repos XML by hand. It
> gives us the maximum of flexibility. However, on the other hand, the
> features XML and code contain should be sync.
> I would like to improve the generate features MOJO, however leveraging
> most of all functionalities around features (prerequisites, dependency
> flag, inner features, ...).
>
> I have to dig a little bit around that, but if you want some ideas
> already, please let me know.
>
> Thoughts ?
>
> Regards
> JB
> --
> Jean-Baptiste Onofré
> jbono...@apache.org
> http://blog.nanthrax.net
> Talend - http://www.talend.com
>

Reply via email to