How to use the iPOJO Maven Plug-in¶
Basic configuration¶
To use the iPOJO Maven plug-in, edit the following pom.xml (replace all $XXX elements):
<project> <modelVersion>4.0.0</modelVersion> <groupId>$YOUR_GROUP_ID</groupId> <artifactId>$YOUR_ARTIFACT_ID</artifactId> <version>$YOUR_ARTIFACT_VERSION</version> <name>$YOUR_PROJECT_NAME</name> <!-- Use the bundle packaging type --> <packaging>bundle</packaging> <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> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-ipojo-plugin</artifactId> <version>1.12.1</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 either inside src/main/ipojo
or inside the src/main/resources
folder and 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 ...hello.client\target [INFO] Deleting directory ...hello.client\target\classes [INFO] Deleting directory ...hello.client\target\test-classes [INFO] Deleting directory ...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 ...hello.client\target\classes [INFO] [resources:testResources] [INFO] Using default encoding to copy filtered resources. [INFO] Resource directory does not exist: ...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 : ...hello.client\target\classes\metadata.xml [INFO] Input Bundle File : ...hello.client\target\hello.client-0.0.1.jar [INFO] Bundle manipulation - SUCCESS [INFO] [install:install] [INFO] Installing ...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.12.1</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 file or directory. The given file path is relative to the root directory ("./ipojo/meta.xml"). If the specified location is a directory, all contained XML files will be used. By default, the plugin searches metadata files into the src/main/ipojo
folder. If not found then it searches for target/classes/metadata.xml
and ./metadata.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.12.1</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:
<plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-ipojo-plugin</artifactId> <version>1.12.1</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:generate \ -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 update), the src/main/java and src/main/resources folders, * the structure of your package name.
The generated project uses iPOJO annotation and is ready to be deployed.
Maven Archetype
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¶
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.12.1</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/CURRENT/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>