THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
Wiki Markup |
---|
{include:apache-felix-ipojo-header} {html} <div class="content"> {html} h1. How to use the iPOJO Maven Plug-in {div:class=toc} {toc:maxLevel=4|minLevel=2} {div} h2. Basic configuration To use the iPOJO Maven plug-in, edit the following pom.xml (replace all $XXX elements): {div:class=pom} <project> <modelVersion>4.0.0</modelVersion> <packaging>bundle</packaging> <!-- Use the BND Maven plug-in --> {color:red} {color} {color:red}<groupId>$YOUR_GROUP_ID</groupId>{color} {color:red} {color} {color:red}<artifactId>$YOUR_ARTIFACT_ID</artifactId>{color} {color:red} {color} {color:red}<version>$YOUR_ARTIFACT_VERSION</version>{color} {color:red} {color} {color:red}<name>$YOUR_PROJECT_NAME</name>{color} {color:red} {color} {color:red}<dependencies>{color} {color:red} {color} {color:red}$YOUR_MAVEN_DEPENDENCIES{color} {color:red} {color} {color:red}</dependencies>{color} <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> {color:red} {color}{color:red}<Private-Package>$YOUR_PRIVATE_PACKAGE</Private-Package>{color} {color:red} {color}{color:red}<Export-Package>$YOUR_EXPORTED_PACKAGE</Export-Package>{color} </instructions> </configuration> </plugin> <!-- iPOJO Maven Plugin Configuration : nothing to do --> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-ipojo-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>ipojo-bundle</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> {div} 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". h2. Execution To manipulate your project, use the "_mvn clean install_" command. The output should be like: {div:class=pom} \[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\] \-----------------------------------------------------------------------\- {div} h2. Configuration Options You can configure the localization of the iPOJO metadata file as following: {div:class=pom} <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-ipojo-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>ipojo-bundle</goal> </goals> <configuration> {color:red}<metadata>ipojo/meta.xml</metadata>{color} </configuration> </execution> </executions> </plugin> {div} 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}}. *Note:* The directory support was introduced in the {{1.7.0}} version. Previously only one metadata file was found. *Compatibility:* Before the {{1.7.0}}, the set location was searched in all resource folders. This is no more supported because it's an anti-pattern. The second option allows skipping annotations processing, by using the {{ignoreAnnotations}} element: {div:class=pom} <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-ipojo-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>ipojo-bundle</goal> </goals> <configuration> {color:red}<ignoreAnnotations>true</ignoreAnnotations>{color} </configuration> </execution> </executions> </plugin> {div} 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: {div:class=pom} <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-ipojo-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>ipojo-bundle</goal> </goals> <configuration> {color:red}<ignoreEmbeddedSchemas>true</ignoreEmbeddedSchemas>{color} </configuration> </execution> </executions> </plugin> {div} h2. 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: {code} mvn org.apache.maven.plugins:maven-archetype-plugin:creategenerate \ -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 {code} This command generates : * a pom file (to fill outupdate), * 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 generated project uses iPOJO annotation and is ready to fillbe outdeployed. {info:title=Maven Archetype} The maven-ipojo-plugin archetype generates a pom file using the latest released version of the maven-ipojo-plugin. {info} h2. 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. {div:class=pom} <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-ipojo-plugin</artifactId> <version>1.6.0</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> {div} \\ \\ {include:apache-felix-ipojo-footer} |