You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Bundle Plugin for Maven

This plugin for Maven 2 is based on the BND tool from Peter Kriens. The way BND works is by treating your project as a big collection of classes (e.g., project code, dependencies, and the class path). The way you create a bundle with BND is to tell it the content of the bundle's JAR file as a subset of the available classes. This plugin wraps BND to make it work specifically with the Maven 2 project structure and to provide it with reasonable default behavior for Maven 2 projects.

Simple Example

Rather than going straight to a detailed list of plugin features, we will first look at a simple example of how to use the plugin to give an immediate flavor. A detailed "how to" will follow.

Assume that we have a simple bundle project that has a pubic API package an several implementation packages, such as:

org.foo.myproject.api
org.foo.myproject.impl1
org.foo.myproject.impl2
...

If we also assume that we have a bundle activator in one of the implementation packages, then <plugins> section of the POM file would look like this:

...
<plugins>
  <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
      <instructions>
        <Export-Package>org.foo.myproject.api</Export-Package>
        <Private-Package>org.foo.myproject.*</Private-Package>
        <Bundle-Activator>org.foo.myproject.impl1.Activator</Bundle-Activator>
      </instructions>
    </configuration>
  </plugin>
<plugins>
...

The <Export-Package> and <Private-Package> instructions tell the plugin about the contents of the bundle JAR file. The <Export-Package> instruction tells the plugin which of the available packages to include into the bundle and to export, while the <Private-Package> instruction indicates which of the available packages to include into the bundle but not export. If the two sets overlap, as they do in the case, then the export takes precedence. Since we did not specify any values for any other bundle manifest headers, they will assume default values which are described below. One specific behavior to highlight is that the plugin generates the Import-Package bundle manifest header based on the specified contents of the bundle, which means that you generally do not ever need to specify it.

Features

Default Behavior

Instructions

Detailed "How To"

  • No labels