Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Include Page
apache-felix-ipojo-header
apache-felix-ipojo-header

...

HTML

...


<div class="content">

How to use the iPOJO Maven Plug-in

Div
classtoc
Table of Contents
maxLevel4
minLevel2

Basic configuration

To use the iPOJO Maven plug-in, edit the following pom.xml (replace all $XXX elements):

Div
classpom

<project>
 <modelVersion>4

{html} h1. How to use the iPOJO Maven Plug-in {toc:maxLevel=4|minLevel=2|class=toc} h2. Basic configuration To use the iPOJO Maven plug-in, edit the following pom.xml (replace all $xxx elements): {div:class=pom} <project> &nbsp;<modelVersion>4

.0.0</modelVersion>

&nbsp;<packaging>bundle<

 <packaging>bundle</packaging>

<!--

Use

the

BND

Maven

plug-in

-->

{color:red}&nbsp;{color} {color:red}


  <groupId>$YOUR_GROUP_ID</groupId>

{color} {color:red}&nbsp;{color}{color:red}


  <artifactId>$YOUR_ARTIFACT_ID</artifactId>

{color} {color:red}&nbsp;{color} {color:red}<version>$YOUR_ARTIFACT_VERSION</version>{color} {color:red}&nbsp;{color} {color:red}


  <version>$YOUR_ARTIFACT_VERSION</version>
  <name>$YOUR_PROJECT_NAME</name>

{color} {color:red}&nbsp;{color} {color:red}<dependencies>{color} {color:red}&nbsp;&nbsp;&nbsp;{color} {color:red}$YOUR_MAVEN_DEPENDENCIES{color} {color:red}&nbsp;{color} {color:red}</dependencies>{color} &nbsp;<build> &nbsp;&nbsp;&nbsp;<plugins> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!-- BND Maven Plugin Configuration --> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<plugin> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<groupId>org.apache.felix</groupId> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<artifactId>maven-bundle-plugin</artifactId> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <extensions>true</extensions> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <configuration> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <instructions> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Bundle-SymbolicName>$\{pom.artifactId}</Bundle-SymbolicName> {color:red}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{color}{color:red}<Private-Package>$YOUR_PRIVATE_PACKAGE</Private-Package>{color} {color:red}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{color}{color:red}<Export-Package>$YOUR_EXPORTED_PACKAGE</Export-Package>{color} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</instructions> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</configuration> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</plugin> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!-- iPOJO Maven Plugin Configuration : nothing to do --> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<plugin> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<groupId>org.apache.felix</groupId> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<artifactId>maven-ipojo-plugin</artifactId> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<version>1.2.0</version> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<executions> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<execution> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <goals> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<goal>ipojo-bundle</goal> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</goals> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</execution> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</executions> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</plugin> &nbsp;&nbsp;&nbsp;</plugins> &nbsp;</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 inside the "src/main/resources" folder and is 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\] \

  <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.6.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 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:

Div
classpom

[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\] Building Hello Client \[INFO\]&nbsp;&nbsp;&nbsp;task-segment: \[clean, install\] \[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:

Div
classpom

<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>
             <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.

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
classpom

<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>
        </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:

Div
classpom

<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>
            <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:

Code Block
\] \[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>
&nbsp;&nbsp;&nbsp; <groupId>org.apache.felix</groupId>
&nbsp;&nbsp;&nbsp; <artifactId>maven-ipojo-plugin</artifactId>
&nbsp;&nbsp;&nbsp; <version>1.2.0</version>
&nbsp;&nbsp;&nbsp; <executions>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <execution>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <goals>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <goal>ipojo-bundle</goal>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </goals>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <configuration>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{color:red}<metadata>ipojo/meta.xml</metadata>{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </configuration>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</execution>
&nbsp;&nbsp;&nbsp;</executions>
</plugin>
{div}
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:
{div:class=pom}
<plugin>
&nbsp;&nbsp;&nbsp; <groupId>org.apache.felix</groupId>
&nbsp;&nbsp;&nbsp; <artifactId>maven-ipojo-plugin</artifactId>
&nbsp;&nbsp;&nbsp; <version>1.2.0</version>
&nbsp;&nbsp;&nbsp; <executions>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <execution>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <goals>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <goal>ipojo-bundle</goal>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </goals>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <configuration>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{color:red}<ignoreAnnotations>true</ignoreAnnotations>{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </configuration>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</execution>
&nbsp;&nbsp;&nbsp;</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>
&nbsp;&nbsp;&nbsp; <groupId>org.apache.felix</groupId>
&nbsp;&nbsp;&nbsp; <artifactId>maven-ipojo-plugin</artifactId>


&nbsp;&nbsp;&nbsp; <version>1.2.0</version>
&nbsp;&nbsp;&nbsp; <executions>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <execution>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <goals>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <goal>ipojo-bundle</goal>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </goals>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <configuration>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{color:red}<ignoreEmbeddedSchemas>true</ignoreEmbeddedSchemas>{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </configuration>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</execution>
&nbsp;&nbsp;&nbsp;</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

...

  • 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.

Info
titleMaven Archetype

The

The src/main/resources folder contains a metadata.xml file to fill out. {info:title=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.

Div
classpom

<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.

2

6.0</version>

<executions> <execution> <goals>


   <executions>
       <execution>
       <goals>
       <goal>ipojo-bundle</goal>


       </goals>

<configuration>


       <configuration>
       <ignoreAnnotations>true</ignoreAnnotations>

<metadata>


       <metadata>
       <![CDATA[

<ipojo


       <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


        <component
        classname="org.apache.felix.ipojo.test.scenarios.component.LifecycleControllerTest"


        name="LFC-Test">

<provides /> <controller


        <provides />
        <controller field="m_state"

/>

<properties> <property


        <properties>
        <property name="conf"

field="m_conf"

method="setConf"

/>


        </properties>


        </component>

<component


        <component
        classname="org.apache.felix.ipojo.test.scenarios.component.LifecycleControllerTest"


        name="LFC-Test-Immediate"

immediate="true"

architecture="true">

<provides /> <controller


        <provides />
        <controller field="m_state"

/>

<properties> <property


        <properties>
        <property name="conf"

field="m_conf"

method="setConf"

/>


        </properties>

</component> </ipojo> ]]> </metadata> </configuration> </execution> </executions> </plugin> {div} \\ \\ {include:


        </component>
       </ipojo>
       ]]>
    </metadata>
    </configuration>
    </execution>
   </executions>
</plugin>



Include Page
apache-felix-ipojo-footer
apache-felix-ipojo-footer

...