A Maven project for building an OSGi bundle can be a simple single level project. It does not require any sub-projects. However, it does require that you do the following:
![]() | Tip |
---|---|
There are several Maven archetypes you can use to set up your project with the appropriate settings. |
A project that constructs an OSGi bundle can be a single level project. It only
requires that you have a top-level POM file and a src
folder. As
in all Maven projects, you place all Java source code in the
src/java
folder, and you place any non-Java resources in the
src/resources
folder.
Non-Java resources include Spring configuration files, JBI endpoint configuration files, and WSDL contracts.
![]() | Note |
---|---|
Fuse ESB OSGi projects that use Fuse Service Framework, Fuse Mediation Router, or another
Spring configured bean also include a |
Before you can use the bundle plug-in you must add a dependency on Apache Felix. After you add the dependency, you can add the bundle plug-in to the plug-in portion of the POM.
Example D.1 shows the POM entries required to add the bundle plug-in to your project.
Example D.1. Adding an OSGi bundle plug-in to a POM
... <dependencies> <dependency><groupId>org.apache.felix</groupId> <artifactId>org.osgi.core</artifactId> <version>1.0.0</version> </dependency> ... </dependencies> ... <build> <plugins> <plugin>
<groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
<Import-Package>*,org.apache.camel.osgi</Import-Package>
<Private-Package>org.apache.servicemix.examples.camel</Private-Package>
</instructions> </configuration> </plugin> </plugins> </build> ...
The entries in Example D.1 do the following:
Adds the dependency on Apache Felix | |
Adds the bundle plug-in to your project | |
Configures the plug-in to use the project's artifact ID as the bundle's symbolic name | |
Configures the plug-in to include all Java packages imported by the bundled classes; also imports the org.apache.camel.osgi package | |
Configures the plug-in to bundle the listed class, but not to include them in the list of exported packages |
![]() | Note |
---|---|
Edit the configuration to meet the requirements of your project. |
For more information on configuring the bundle plug-in, see Configuring the Bundle Plug-In.
To have Maven use the bundle plug-in, instruct it to package the results of the
project as a bundle. Do this by setting the POM file's packaging
element to bundle
.
There are several Maven archetypes to generate a project that is preconfigured to use the bundle plug-in:
The Spring OSGi archetype creates a generic project for building an OSGi project using Spring DM, as shown:
org.springframework.osgi/spring-bundle-osgi-archetype/1.1.2
You invoke the archetype using the following command:
mvn archetype:create
-DarchetypeGroupId=org.springframework.osgi
-DarchetypeArtifactId=spring-osgi-bundle-archetype
-DarchetypeVersion=1.12
-DgroupId=groupId
-DartifactId=artifactId
-Dversion=version
The Fuse Service Framework code-first archetype creates a project for building a service from Java, as shown:
org.apache.servicemix.tooling/servicemix-osgi-cxf-code-first-archetype/2008.01.0.3-fuse
You invoke the archetype using the following command:
mvn archetype:create
-DarchetypeGroupId=org.apache.servicemix.tooling
-DarchetypeArtifactId=spring-osgi-bundle-archetype
-DarchetypeVersion=2008.01.0.3-fuse
-DgroupId=groupId
-DartifactId=artifactId
-Dversion=version
The Fuse Service Framework wsdl-first archetype creates a project for creating a service from WSDL, as shown:
org.apache.servicemix.tooling/servicemix-osgi-cxf-wsdl-first-archetype/2008.01.0.3-fuse
You invoke the archetype using the following command:
mvn archetype:create
-DarchetypeGroupId=org.apache.servicemix.tooling
-DarchetypeArtifactId=servicemix-osgi-cxf-wsdl-first-archetype
-DarchetypeVersion=2008.01.0.3-fuse
-DgroupId=groupId
-DartifactId=artifactId
-Dversion=version
The Fuse Mediation Router archetype creates a project for building a route that is deployed into Fuse ESB, as shown:
org.apache.servicemix.tooling/servicemix-osgi-camel-archetype/2008.01.0.3-fuse
You invoke the archetype using the following command:
mvn archetype:create
-DarchetypeGroupId=org.apache.servicemix.tooling
-DarchetypeArtifactId=servicemix-osgi-camel-archetype
-DarchetypeVersion=2008.01.0.3-fuse
-DgroupId=groupId
-DartifactId=artifactId
-Dversion=version