...
Include Page |
---|
| apache-felix-ipojo-header |
---|
|
---|
|
apache-felix-ipojo-header |
|
...
...
...
How to use the iPOJO Maven Plug-in
{ Div |
---|
: | = |
}
{:=|=2}
{div}
h2. Basic configuration
To use the iPOJO Maven |
Basic configuration
To use the iPOJO Maven plug-in,
...
edit
...
the
...
following
...
pom.xml
...
(replace
...
all
...
$XXX
...
elements):
{ Div |
---|
: | = |
<project> <modelVersion>4 }
<project>
<modelVersion>4.0.0</modelVersion>
<packaging>bundle< <packaging>bundle</packaging> <!-- Use the BND Maven plug-in -->
{color:red} {color} {color:red}<groupId>$YOUR_ <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>$\{ <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>
{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\] \------------------------- <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 |
---|
|
[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\] task-segment: \[clean, install\]
\[INFO\] \--------------- [INFO] BUILD SUCCESSFUL [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: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
{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: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}] 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 |
---|
|
<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 |
---|
|
<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 |
---|
|
<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 |
---|
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.
Info |
---|
|
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 |
---|
|
<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> |
Include Page |
---|
| apache-felix-ipojo-footer |
---|
| apache-felix-ipojo-footer |
---|
|