2015-09-17

Create a custom Apache Karaf server

What you will do:
  • Create a custom Apache Karaf distribution using karaf-maven-plugin
  • Create a custom logo using maven-bundle-plugin
What you will learn:
  • Configure karaf-maven-plugin
  • Build a OSGi bundle using maven-bundle-plugin
  • Use maven-dependency-plugin for post-processing
This tutorial creates a custom Karaf 3 server called "Dekantar" using Maven. The procedure for Karaf 2 and 4 are similar.
Karaf 2: Coming soon
Karaf 3: https://github.com/juttayaya/karaf/tree/master/karaf3/custom-karaf
Karaf 4: Coming soon


Step 1: Import the Karaf 3 dependencies
Add the following entry in the dependencyManagement section of the pom.xml
<dependencyManagement>
<!-- Import Karaf POM to use the correct 
     version of the Karaf dependencies -->
<dependencies>
    <dependency>
        <groupId>org.apache.karaf</groupId>
        <artifactId>karaf</artifactId>
        <version>${karaf.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencies>
</dependencyManagement>

Doing this will automatically configure the custom Karaf Maven build to use the correct version of dependencies libraries.

See https://github.com/juttayaya/karaf/blob/master/karaf3/custom-karaf/pom.xml for full example.

Step 2: Configure the karaf-maven-plugin
Add the following entry to the pom.xml to configure karaf-maven-plugin to build Karaf
<dependencies>
<dependency>
<!-- Scope is compile so all features (there is only one) are installed
     into startup.properties and
     the feature repo itself is not added in
     etc/org.apache.karaf.features.cfg file
-->
    <groupId>org.apache.karaf.features</groupId>
    <artifactId>framework</artifactId>
    <type>kar</type>
    <scope>compile</scope>
</dependency>
<dependency>
<!-- Scope is runtime so the feature repo is listed
     in etc/org.apache.karaf.features.cfg file,
     and features will installed into the system directory.
     This imports the standard Karaf features described at   https://repo1.maven.org/maven2/org/apache/karaf/features/standard/3.0.4/standard-3.0.4-features.xml
     These features are installed in the karaf-maven-plugin configuration
-->
    <groupId>org.apache.karaf.features</groupId>
    <artifactId>standard</artifactId>
    <classifier>features</classifier>
    <type>xml</type>
    <scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
    <groupId>org.apache.karaf.tooling</groupId>
    <artifactId>karaf-maven-plugin</artifactId>
    <configuration>
    <karafVersion>${karaf.version}</karafVersion>
    <!-- bootFeatures starts up these features when Karaf first boots up.
         The feature names are obtained from the features.xml in the
         dependencies section
    -->
    <bootFeatures>
        <feature>standard</feature>
        <feature>config</feature>
        <feature>ssh</feature>
    </bootFeatures>
    <!-- installedFeatures only installs the libraries but the user will
         have to start it up manually via Karaf command line feature:install
    -->
    <installedFeatures>
        <feature>scheduler</feature>
        <feature>war</feature>
    </installedFeatures>
    </configuration>
</plugin>
</plugins>
</build>


Step 3: Create customized logo
You can customize the logo displayed when users first log in via command line

A.) Create the file src/main/resources/org/apache/karaf/branding/branding.properties
This file configures the welcome logo and command prompt.

B.) Configure maven-bundle-plugin to create an OSGi bundle with the branding.properties file.  Add the following entry in the pom.xml
<build>
<plugins>
<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <configuration>
    <instructions>
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
        <Import-Package>*</Import-Package>
        <Private-Package>!*</Private-Package>
        <Export-Package>org.apache.karaf.branding</Export-Package>
        <Spring-Context>*;public-context:=false</Spring-Context>
    </instructions>
    </configuration>
</plugin>
</plugins>
</build>

The maven-bundle-plugin creates a JAR file with a META-INF/MANIFEST.MF and branding.properties .

See https://github.com/juttayaya/karaf/blob/master/karaf3/custom-karaf/custom-karaf-branding/pom.xml for full example.

C.) Configure maven-dependency-plugin to copy the branding JAR created in step B into the Karaf lib directory.  Add the following entry to the pom.xml
<build>
<plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <inherited>false</inherited>
    <executions>
        <execution>
        <id>copy</id>
        <phase>generate-resources</phase>
        <goals>
        <goal>copy</goal>
        </goals>
        <configuration>
        <artifactItems>
        <artifactItem>
        <groupId>${project.groupId}</groupId>
        <artifactId>custom-karaf-branding</artifactId>
        <version>${project.version}</version>
        <!-- target/assembly is the directory karaf-maven-plugin
  assembles all the files of the Karaf server -->
        <outputDirectory>target/assembly/lib</outputDirectory>
        <destFileName>custom-karaf-branding.jar</destFileName>
        </artifactItem>
        </artifactItems>
        </configuration>
        </execution>
    </executions>
</plugin>
</plugins>
</build>

See https://github.com/juttayaya/karaf/blob/master/karaf3/custom-karaf/custom-karaf-server/pom.xml for full example.

Step 4: Build it
Run mvn clean install
The output file is target/custom-karaf-server.tar.gz and target/custom-karaf-server.zip

3 comments:

  1. Exceptionally structured website offering valuable insights, unigetui software updates guidance helps visitors manage applications effortlessly and securely. The responsive design ensures a pleasant browsing experience on different devices without confusion. Detailed explanations, attractive visuals, and efficient organization make this platform highly impressive and beneficial for modern users everywhere.

    ReplyDelete
  2. Electrifyingly structured platform featuring valuable tools, hidusbfmouse response booster features support efficient hardware adjustments for smoother gaming experiences online. Visitors can easily locate information thanks to the organized layout and responsive design across devices. Excellent usability, clear instructions, and professional presentation reflect strong commitment toward maintaining exceptional website quality consistently.

    ReplyDelete
  3. Harmonically presented website offering reliable information, mtkclient flashing software capabilities improve smartphone management processes while keeping navigation intuitive and efficient. The platform maintains strong visual appeal alongside highly informative resources for technical audiences. Excellent accessibility, organized sections, and professional updates make this website exceptionally useful and highly recommended among technology enthusiasts globally.

    ReplyDelete