SyntaxHighlighter JS

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

1 comment:


  1. Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging. If anyone wants to become a Java developer learn from Java Training in Chennai. or learn thru Java Online Training from India . Nowadays Java has tons of job opportunities on various vertical industry.

    ReplyDelete