How to use the iPOJO Maven Plug-in
To use the iPOJO Maven plug-in, edit the following pom.xml (replace all $xxx elements):
<project>
<modelVersion>4.0.0</modelVersion>
<packaging>bundle</packaging> <!-- Use the BND Maven plug-in -->
<groupId>$YOUR_GROUP_ID</groupId>
<artifactId>$YOUR_ARTIFACT_ID</artifactId>
<version>$YOUR_ARTIFACT_VERSION</version>
<name>$YOUR_PROJECT_NAME</name>
<dependencies>
$YOUR_MAVEN_DEPENDENCIES
</dependencies>
<build>
<plugins>
<!-- BND Maven Plugin Configuration -->
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
<Private-Package>$YOUR_PRIVATE_PACKAGE</Private-Package>
<Export-Package>$YOUR_EXPORTED_PACKAGE</Export-Package>
</instructions>
</configuration>
</plugin>
<!-- iPOJO Maven Plugin Configuration : nothing to do -->
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-ipojo-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>ipojo-bundle</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
The iPOJO Maven Plug-in is generally used with the BND Maven Plug-in (more details here). However the two configurations are completely separated. So, you can use all BND Maven plug-in features. The iPOJO configuration section can be used as previously written without any changes. However it requires that your metadata file is inside the "src/main/resources" folder and is named "metadata.xml".
Execution
To manipulate your project, use the "mvn clean install" command. The output should be like:
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------------
[INFO] Building Hello Client
[INFO] task-segment: [clean, install]
[INFO] ----------------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] Deleting directory D:\clement\workspaces\iPOJO-Dev\hello.client\target
[INFO] Deleting directory D:\clement\workspaces\iPOJO-Dev\hello.client\target\classes
[INFO] Deleting directory D:\clement\workspaces\iPOJO-Dev\hello.client\target\test-classes
[INFO] Deleting directory D:\clement\workspaces\iPOJO-Dev\hello.client\target\site
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] [compiler:compile]
[INFO] Compiling 1 source file to D:\clement\workspaces\iPOJO-Dev\hello.client\target\classes
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] Resource directory does not exist: D:\clement\workspaces\iPOJO-Dev\hello.client\src\test\resources
[INFO] [compiler:testCompile]
[INFO] No sources to compile
[INFO] [surefire:test]
[INFO] No tests to run.
[INFO] [bundle:bundle]
[INFO] [org.apache.felix.ipojo.:ipojo-bundle {execution: default}]
[INFO] Start bundle manipulation
[INFO] Metadata File : D:\clement\workspaces\iPOJO-Dev\hello.client\target\classes\metadata.xml
[INFO] Input Bundle File : D:\clement\workspaces\iPOJO-Dev\hello.client\target\hello.client-0.0.1.jar
[INFO] Bundle manipulation - SUCCESS
[INFO] [install:install]
[INFO] Installing D:\clement\workspaces\iPOJO-Dev\hello.client\target\hello.client-0.0.1.jar to D:\Dev\maven-repo\ipojo\example\hello.client\0.0.1\hello.client-0.0.1.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9 seconds
[INFO] Finished at: Mon Aug 13 14:04:55 CEST 2007
[INFO] Final Memory: 6M/13M
[INFO] ------------------------------------------------------------------------
Configuration Options
You can configure the localization of the iPOJO metadata file as following:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-ipojo-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>ipojo-bundle</goal>
</goals>
<configuration>
<metadata>ipojo/meta.xml</metadata>
</configuration>
</execution>
</executions>
</plugin>
In the metadata element, you can specify your metadata files. This file must be either in the same directory than the POM file (project root) or in one of the resource folder of the maven project (for instance, "src/main/resources/ipojo/meta.xml").
The second option allows skipping annotations processing, by using the ignoreAnnotations
element:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-ipojo-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>ipojo-bundle</goal>
</goals>
<configuration>
<ignoreAnnotations>true</ignoreAnnotations>
</configuration>
</execution>
</executions>
</plugin>
You can also ignore embedded XML-Schemas to use external ones. To do so, add the ignoreEmbeddedSchemas
. If set to true
, the manipulator doesn't use embedded XML-Schemas [1.1.0-SNAPSHOT]:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-ipojo-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>ipojo-bundle</goal>
</goals>
<configuration>
<ignoreEmbeddedSchemas>true</ignoreEmbeddedSchemas>
</configuration>
</execution>
</executions>
</plugin>
Generate the skeleton of your iPOJO bundle
The maven-ipojo-plugin provides a way to generate the skeleton of your project. To generate this structure, just launch the following command:
mvn org.apache.maven.plugins:maven-archetype-plugin:create \ -DarchetypeArtifactId=maven-ipojo-plugin \ -DarchetypeGroupId=org.apache.felix \ -DartifactId=ARTIFACT_NAME_OF_YOUR_PROJECT \ -DgroupId=GROUP_ID_OF_YOUR_PROJECT \ -DarchetypeVersion=VERSION_OF_YOUR_PROJECT \ -DpackageName=PACKAGE_NAME
This command generates :
- a pom file (to fill out),
- the src/main/java and src/main/resources folders,
- the structure of your package name.
The src/main/resources folder contains a metadata.xml file to fill out.
Note: the maven-ipojo-plugin archetype generates a pom file using the latest released version of the maven-ipojo-plugin.
Describing iPOJO configuration in the pom file [New in the 1.1.0-SNAPSHOT version ]
It is also possible to describe iPOJO components and instances inside the pom file (avoiding using a externalized file). The configuration can be described in the metadata
attribute inside a CDATA block.
<plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-ipojo-plugin</artifactId> <version>1.1.0-SNAPSHOT</version> <executions> <execution> <goals> <goal>ipojo-bundle</goal> </goals> <configuration> <ignoreAnnotations>true</ignoreAnnotations> <metadata> <![CDATA[ <ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/1.1.0-SNAPSHOT/core.xsd" xmlns="org.apache.felix.ipojo"> <component classname="org.apache.felix.ipojo.test.scenarios.component.LifecycleControllerTest" name="LFC-Test"> <provides /> <controller field="m_state" /> <properties> <property name="conf" field="m_conf" method="setConf" /> </properties> </component> <component classname="org.apache.felix.ipojo.test.scenarios.component.LifecycleControllerTest" name="LFC-Test-Immediate" immediate="true" architecture="true"> <provides /> <controller field="m_state" /> <properties> <property name="conf" field="m_conf" method="setConf" /> </properties> </component> </ipojo> ]]> </metadata> </configuration> </execution> </executions> </plugin>
Overview
Getting Started
- iPOJO in 10 minutes
- How to use iPOJO Annotations
- iPOJO Hello Word (Maven-Based) tutorial
- iPOJO Advanced Tutorial
- iPOJO Composition Tutorial
User Guide
- Describing components (handler list)
- Using XML Schemas
- Describing components with the iPOJO-API
- Testing components
- Advanced Topics
- Eclipse Integration
- FAQ
- iPOJO Reference Card
Tools
- iPOJO Eclipse Plug-in
- iPOJO Ant Task
- iPOJO Maven Plug-in
- Online-Manipulator
- iPOJO Arch Command
- iPOJO Webconsole plugin
- Junit4OSGi
Developer Guide
- Javadoc: 1.2
- How to write your own handler
- How to use iPOJO Manipulation Metadata
- Dive into the iPOJO Manipulation depths
Misc & Contact
- Issues Tracker
- Supported JVMs
- Supported OSGi Implementations
- iPOJO's Dark Side Blog
- Future Ideas
- Article & Presentations
Experimentation