Folks,

I've created a Maven2 archetype for creating mavenized OSGi bundle projects quickly. An archetype is a very simple plugin, that contains the project prototype you wish to create. Upon executing the OSGi archetype, maven will automatically create:

* a project directory structure
* a maven POM for building your bundle (which includes reference to the maven-osgi-plugin and the osgi.jar)
* a simple bundle activator java class to kickstart your bundle development

Using a Maven2 archetype is a great way for Maven newbies to get productive quickly using the maven build system.

Pre-Requisites
==========
As a pre-requisite for using the OSGi archetype, you'll need to (1) install Maven2, (2) install the maven-osgi-plugin, and (3) add the Safehaus Maven2 repository to your Maven2 settings. A how-to for all three of these pre-reqs can be found at [1].

How-To
======
To use the OSGi archetype to kickstart your next OSGi/Maven2 bundle development project, perform the following steps (after performing the above 3 steps):

(1) fetch the osgi-archetype project from the Felix repo at [2]

(2) install the osgi-archetype plugin by executing the following from the root of the osgi-archetype directory:

mvn clean install

(3) navigate to the directory where you wish to create your new OSGi bundle project and execute the following:

mvn archetype:create -DarchetypeGroupId=org.apache.felix.archetypes -DarchetypeArtifactId=osgi-archetype -DarchetypeVersion=1.0 -DgroupId=<your project group ID> -DartifactId=<your project artifact ID>

(4) navigate to the subdirectory just created (named after your artifactId specified), and execute the following to build your OSGi bundle:

mvn package

(5) navigate to the subdirectory named 'target' and you'll see the your bundle jar (named after the artifactId specified). deploy this to your OSGi container such as Oscar (or Felix). A working bundle out of the box!

(6) Modify the Activator code, add your additional bundle classes, and modify the POM to customize the manifest entries to complete your bundle development.

A Few Notes
=========
Your project group ID should be something like a namespace identifier, e.g. gov.nashville.jis or org.apache.directory. Maven will use this group ID as a package naming structure for your bundle code.

Your artifact ID should reflect the name of your project or bundle, e.g. echo-server or http-service or jabber-server. Maven will use this artifact ID to construct the name of your bundle jar (unless you override it in the POM) and the root name of the project directory.

Refer to [1] for instructions on how to the customize the POM for manipulating the OSGi bundle manifest. Refer to [3] for documentation on how to customize the POM for using maven for other build tasks (including dependency management).

I'll try to get these instructions up on the OSGi Wiki at Safehaus soon in hopefully a more instructive format than this email.

References
=======
[1] http://docs.safehaus.org/display/OSGI/OSGi+Plugin+for+Maven+2.0
[2] https://svn.apache.org/repos/asf/incubator/felix/trunk/tools/maven2/osgi-archetype
[3] http://maven.apache.org/guides/index.html

Reply via email to