Search code examples
cxfapache-karaf

Apache Karaf feature offline issue


In karaf org.apache.karaf.features.cfg file

I have added

featuresRepositories=mvn:org.apache.cxf.karaf/apache-cxf/3.0.8/xml/features

featuresBoot = cxf-jaxws

The cxf feature could fetch and be installed when karaf started with the connection.

But it will fail without connection, how can I pre-install cxf feature?


Solution

  • This is likely far from most optimal solution for this (would love to hear about the better ones) but you could create offline-repository project using karaf-feature-archetype and configure karaf-maven-plugin use something like following configuration:

    <plugin>
        <groupId>org.apache.karaf.tooling</groupId>
        <artifactId>karaf-maven-plugin</artifactId>
    
        <configuration>
            <startLevel>50</startLevel>
            <aggregateFeatures>true</aggregateFeatures>
            <checkDependencyChange>true</checkDependencyChange>
            <failOnDependencyChange>false</failOnDependencyChange>
            <logDependencyChanges>true</logDependencyChanges>
            <overwriteChangedDependencies>true</overwriteChangedDependencies>
        </configuration>
    
        <executions>
            <execution>
                <id>features-add-to-repo</id>
                <phase>generate-resources</phase>
                <goals>
                    <goal>features-add-to-repository</goal>
                </goals>
                <configuration>  
                    <descriptors>
                        <!-- Feature repository paths -->
                        <descriptor>mvn:groupId/artifactId/version/xml/features</descriptor>
                    </descriptors>
                    <features>
                        <!-- features and their artifacts + dependencies to add to offline repository-->
                        <feature>featureName</feature>
                        <feature>featureName/version</feature>
                    </features>
                    <repository>target/offline-repository</repository>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    When packaging the project i.e with command maven clean install (in environment with online access) it'll generate offline-repository under target folder which you can copy to your offline environment and tell karaf to use it by adding it to org.ops4j.pax.url.mvn.defaultRepositories in file org.ops4j.pax.url.mvn.cfg i.e file:${user.home}/offline-repository@snapshots@id=local if its located in home directory.

    features.xml itself can be empty this is just to use karaf-maven-plugin not to create an actual feature repository.

    Just be careful if you need to create a new version of the offline-repository to replace the old one. If the new version is missing any of the artifacts that are currently installed to karaf it can cause issues when trying to remove/uninstall them.