Latest wiki doc
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1207338 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/doc/apache-felix-maven-bundle-plugin-bnd.html b/bundleplugin/doc/apache-felix-maven-bundle-plugin-bnd.html
index be895cf..256a1bd 100644
--- a/bundleplugin/doc/apache-felix-maven-bundle-plugin-bnd.html
+++ b/bundleplugin/doc/apache-felix-maven-bundle-plugin-bnd.html
@@ -1,684 +1,61 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head>
-
-
-
<title>Apache Felix - Apache Felix Maven Bundle Plugin (BND)</title>
<link rel="stylesheet" href="apache-felix-maven-bundle-plugin-bnd_files/site.css" type="text/css" media="all">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- </head><body>
+ </head>
+ <body>
<div class="title"><div class="logo"><a href="http://felix.apache.org/site/index.html"><img alt="Apache Felix" src="apache-felix-maven-bundle-plugin-bnd_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="apache-felix-maven-bundle-plugin-bnd_files/apache.png" border="0"></a></div></div>
<div class="menu">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
+<ul>
<li><a href="http://felix.apache.org/site/news.html" title="news">news</a></li>
- <li><a href="http://felix.apache.org/site/license.html" title="license">license</a></li>
- <li><a href="http://felix.apache.org/site/downloads.cgi" rel="nofollow">downloads</a></li>
+ <li><a href="http://www.apache.org/licenses/" class="external-link" rel="nofollow">license</a></li>
+ <li><a href="http://felix.apache.org/site/downloads.cgi" class="external-link" rel="nofollow">downloads</a></li>
<li><a href="http://felix.apache.org/site/documentation.html" title="documentation">documentation</a></li>
<li><a href="http://felix.apache.org/site/mailinglists.html" title="mailinglists">mailing lists</a></li>
<li><a href="http://felix.apache.org/site/contributing.html" title="Contributing">contributing</a></li>
- <li><a href="http://www.apache.org/" rel="nofollow">asf</a></li>
- <li><a href="http://www.apache.org/foundation/sponsorship.html" rel="nofollow">sponsorship</a></li>
- <li><a href="http://www.apache.org/foundation/thanks.html" rel="nofollow">sponsors</a>
+ <li><a href="http://www.apache.org/" class="external-link" rel="nofollow">asf</a></li>
+ <li><a href="http://www.apache.org/security/" class="external-link" rel="nofollow">security</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">sponsors</a>
<!-- ApacheCon Ad -->
-<iframe src="apache-felix-maven-bundle-plugin-bnd_files/button.html" style="border-width: 0pt; float: left;" scrolling="no" width="135" frameborder="0" height="135"></iframe>
-<p style="height: 100px;">
-<!-- ApacheCon Ad -->
-<
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- </p></li></div>
+<iframe src="apache-felix-maven-bundle-plugin-bnd_files/button.html" style="border-width: 0pt; float: left;" frameborder="0" height="135" scrolling="no" width="135"></iframe>
+<p style="height: 100px">
+<!-- ApacheCon Ad --></p></li>
+</ul>
+ </div>
<div class="main">
<h1><a name="ApacheFelixMavenBundlePlugin(BND)-BundlePluginforMaven"></a>Bundle Plugin for Maven</h1>
-<p>This plugin for Maven 2 is based on the <a href="http://www.aqute.biz/Code/Bnd" rel="nofollow">BND</a>
-tool from Peter Kriens. The way BND works is by treating your project
-as a big collection of classes (e.g., project code, dependencies, and
-the class path). The way you create a bundle with BND is to tell it the
-content of the bundle's JAR file as a subset of the available classes.
-This plugin wraps BND to make it work specifically with the Maven 2
-project structure and to provide it with reasonable default behavior
-for Maven 2 projects.</p>
+<p>This plugin for Maven 2 is based on the <a href="http://www.aqute.biz/Bnd/Bnd" class="external-link" rel="nofollow">BND</a>
+ tool from Peter Kriens. The way BND works is by treating your project
+as a big collection of classes (e.g., project code, dependencies, and
+the class path). The way you create a bundle with BND is to tell it the
+content of the bundle's JAR file as a subset of the available classes.
+This plugin wraps BND to make it work specifically with the Maven 2
+project structure and to provide it with reasonable default behavior for
+ Maven 2 projects.</p>
-<div class="panelMacro"><table class="infoMacro"><colgroup><col width="24"><col></colgroup><tbody><tr><td valign="top"><img src="apache-felix-maven-bundle-plugin-bnd_files/information.gif" alt="" align="absmiddle" border="0" width="16" height="16"></td><td>If you have questions about the maven-bundle-plugin please read the <a href="http://felix.apache.org/site/apache-felix-bundle-plugin-faq.html" rel="nofollow">FAQ</a> first. If you still have questions you can ask them on the <a href="http://felix.apache.org/site/mailinglists.html" rel="nofollow">Felix user list</a>.</td></tr></tbody></table></div>
+<div class="panelMacro"><table class="infoMacro"><colgroup><col width="24"><col></colgroup><tbody><tr><td valign="top"><img src="apache-felix-maven-bundle-plugin-bnd_files/information.gif" alt="" align="absmiddle" border="0" height="16" width="16"></td><td>If you have questions about the maven-bundle-plugin please read the <a href="http://felix.apache.org/site/apache-felix-bundle-plugin-faq.html" class="external-link" rel="nofollow">FAQ</a> first. If you still have questions you can ask them on the <a href="http://felix.apache.org/site/mailinglists.html" class="external-link" rel="nofollow">Felix user list</a>.</td></tr></tbody></table></div>
<p><em>NOTE: test scoped dependencies are <b>not</b> included in the classpath seen by BND.</em></p>
-<p>Since the 1.4.0 release, this plugin also aims to automate OBR (OSGi
-Bundle Repository) management. It helps manage a local OBR for your
-local Maven repository, and also supports remote OBRs for bundle
-distribution. The plug-in automatically computes bundle capabilities
-and requirements, using a combination of Bindex and Maven metadata.</p>
+<p>Since the 1.4.0 release, this plugin also aims to automate OBR (OSGi
+Bundle Repository) management. It helps manage a local OBR for your
+local Maven repository, and also supports remote OBRs for bundle
+distribution. The plug-in automatically computes bundle capabilities and
+ requirements, using a combination of Bindex and Maven metadata.</p>
+
+<div class="panelMacro"><table class="tipMacro"><colgroup><col width="24"><col></colgroup><tbody><tr><td valign="top"><img src="apache-felix-maven-bundle-plugin-bnd_files/check.gif" alt="" align="absmiddle" border="0" height="16" width="16"></td><td><b><a href="http://svn.apache.org/repos/asf/felix/releases/maven-bundle-plugin-2.3.5/doc/site/index.html" class="external-link" rel="nofollow">Standard Maven Documentation is now available for maven-bundle-plugin 2.3.5</a></b></td></tr></tbody></table></div>
+
+<div class="panelMacro"><table class="tipMacro"><colgroup><col width="24"><col></colgroup><tbody><tr><td valign="top"><img src="apache-felix-maven-bundle-plugin-bnd_files/check.gif" alt="" align="absmiddle" border="0" height="16" width="16"></td><td><b><a href="http://www.aqute.biz/Bnd/Format" class="external-link" rel="nofollow">A complete list of instructions and their format is available from the BND website</a></b></td></tr></tbody></table></div>
<p><a name="ApacheFelixMavenBundlePlugin(BND)-simpleexample"></a></p>
<h1><a name="ApacheFelixMavenBundlePlugin(BND)-SimpleExample"></a>Simple Example</h1>
-<p>Rather than going straight to a detailed list of plugin features, we
-will first look at a simple example of how to use the plugin to give an
+<p>Rather than going straight to a detailed list of plugin features, we
+will first look at a simple example of how to use the plugin to give an
immediate flavor. A detailed "<a href="#ApacheFelixMavenBundlePlugin%2528BND%2529-howto">how to</a>" will follow.</p>
<p>Assume that we have a simple bundle project that has a pubic API package an several implementation packages, such as:</p>
@@ -714,34 +91,33 @@
</div></div>
<p>The <tt><Export-Package></tt> and <tt><Private-Package></tt> instructions tell the plugin about the contents of the resulting bundle JAR file. The <tt><Export-Package></tt> instruction tells the plugin which of the available packages to copy into the bundle <b>and</b> export, while the <tt><Private-Package></tt> instruction indicates which of the available packages to copy into the bundle <b>but not</b>
-export. If the two sets overlap, as they do in the case, then the
-export takes precedence. Since we did not specify any values for any
-other bundle manifest headers, they will assume default values which
-are described <a href="#ApacheFelixMavenBundlePlugin%2528BND%2529-defaultbehavior">below</a>. One specific behavior to highlight is that the plugin generates the <tt>Import-Package</tt>
-bundle manifest header based on the contents of the bundle, which means
-that you generally do not ever need to explicitly specify it yourself.
+ export. If the two sets overlap, as they do in the case, then the
+export takes precedence. Since we did not specify any values for any
+other bundle manifest headers, they will assume default values which are
+ described <a href="#ApacheFelixMavenBundlePlugin%2528BND%2529-defaultbehavior">below</a>. One specific behavior to highlight is that the plugin generates the <tt>Import-Package</tt>
+ bundle manifest header based on the contents of the bundle, which means
+ that you generally do not ever need to explicitly specify it yourself.
That's it.</p>
<h1><a name="ApacheFelixMavenBundlePlugin(BND)-Features"></a>Features</h1>
-<p>The BND library underlying the plugin defines instructions to direct
-its behavior. For this Maven plugin, these instructions are issued in
+<p>The BND library underlying the plugin defines instructions to direct
+its behavior. For this Maven plugin, these instructions are issued in
the plugin configuration section of the POM file, as was illustrated <a href="#ApacheFelixMavenBundlePlugin%2528BND%2529-simpleexample">above</a>. BND recognizes three types of instructions:</p>
<ol>
- <li><em>Manifest headers</em> - Any instruction that starts with
-a capital letter will appear in the resulting bundle's manifest file;
-the value for the header will either be copied, augmented, or generated
-by BND depending on the instruction.</li>
+ <li><em>Manifest headers</em> - Any instruction that starts with a
+capital letter will appear in the resulting bundle's manifest file; the
+value for the header will either be copied, augmented, or generated by
+BND depending on the instruction.</li>
<li><em>Variables</em> - Any instruction starting with a lowercase letter is assumed to be a variable in the form of a name-value pair, such as <tt>version=3.0</tt>, that can be used for property substitution, but is not copied to the manifest.</li>
- <li><em>Directives</em>
-- Any instruction starting with a '-' character is considered to be a
-directive that informs BND to perform some special processing and is
-not copied to the manifest.</li>
+ <li><em>Directives</em> - Any instruction starting with a '-' character
+ is considered to be a directive that informs BND to perform some
+special processing and is not copied to the manifest.</li>
</ol>
-<p>The remainder of this section covers the most important aspects of BND's instructions; for complete details refer to the <a href="http://www.aqute.biz/Code/Bnd" rel="nofollow">BND documentation</a>.</p>
+<p>The remainder of this section covers the most important aspects of BND's instructions; for complete details refer to the <a href="http://www.aqute.biz/Code/Bnd" class="external-link" rel="nofollow">BND documentation</a>.</p>
<p><a name="ApacheFelixMavenBundlePlugin(BND)-instructions"></a></p>
@@ -749,37 +125,37 @@
<h3><a name="ApacheFelixMavenBundlePlugin(BND)-{{<ExportPackage>}}"></a><tt><Export-Package></tt></h3>
-<p>The <tt><Export-Package></tt> instruction is a list of
-packages for the bundle to export. These packages are copied into the
-resulting bundle JAR file from the available classes (i.e., project
-classes, dependencies, and class path); thus, it is possible to include
-classes into your bundle that are not associated with source files in
-your project. <tt><Export-Package></tt> can be specified with
-package patterns using the '*' wildcard. Also, it is possible to
-exclude packages using negation by starting the package pattern with
-'!'. Thus, non-negated patterns indicate which of the available
-packages to include in the bundle, whereas negated patterns indicate
-which should not be included in the bundle.</p>
+<p>The <tt><Export-Package></tt> instruction is a list of packages
+ for the bundle to export. These packages are copied into the resulting
+bundle JAR file from the available classes (i.e., project classes,
+dependencies, and class path); thus, it is possible to include classes
+into your bundle that are not associated with source files in your
+project. <tt><Export-Package></tt> can be specified with package
+patterns using the '*' wildcard. Also, it is possible to exclude
+packages using negation by starting the package pattern with '!'. Thus,
+non-negated patterns indicate which of the available packages to include
+ in the bundle, whereas negated patterns indicate which should not be
+included in the bundle.</p>
<p>The list of package patterns is ordered and earlier patterns are applied before later patterns. For example, if you specify "<tt>org.foo.*,!org.foo.impl</tt>" the second pattern has no effect since all <tt>org.foo</tt> packages have already been selected by the first pattern. Instead, you should specify "<tt>!org.foo.impl,org.foo.*</tt>", which will export all <tt>org.foo</tt> packages except <tt>org.foo.impl</tt>.</p>
-<p>Following standard OSGi R4 syntax, package patterns can include both
-directives and attributes, which will be copied appropriately into the
-generated Export-Package manifest header. Besides explicitly listing
-package version attributes, BND will also determine package versions by
+<p>Following standard OSGi R4 syntax, package patterns can include both
+directives and attributes, which will be copied appropriately into the
+generated Export-Package manifest header. Besides explicitly listing
+package version attributes, BND will also determine package versions by
examining the source JAR file or from <tt>packageinfo</tt> files in the package directory.</p>
<h3><a name="ApacheFelixMavenBundlePlugin(BND)-{{<PrivatePackage>}}"></a><tt><Private-Package></tt></h3>
<p>The <tt><Private-Package></tt> instruction is similar in every way to the <tt><Export-Package></tt> instruction, except for the fact that these packages will <b>not</b>
-be exported by the bundle. If a package is selected by both the export
+ be exported by the bundle. If a package is selected by both the export
and private package headers, then the export takes precedence.</p>
<h3><a name="ApacheFelixMavenBundlePlugin(BND)-{{<IncludeResource>}}"></a><tt><Include-Resource></tt></h3>
-<p>The <tt><Include-Resource></tt> instruction is a list of
-arbitrary resources that should be copied into the bundle JAR file. The
-specified resources are declared as clauses that can have the following
+<p>The <tt><Include-Resource></tt> instruction is a list of
+arbitrary resources that should be copied into the bundle JAR file. The
+specified resources are declared as clauses that can have the following
forms:</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
@@ -791,68 +167,65 @@
</div></div>
<p>For the <tt><Include-Resource></tt> instruction, actual file paths are relative to the <tt>pom.xml</tt>, while file copy destinations are relative to the root of the resulting bundle JAR file. In the case of <tt>assignment</tt> or <tt>simple</tt> forms, the <tt>PATH</tt> parameter can point to a file or directory. The <tt>simple</tt>
-form will place the resource in the bundle JAR with only the file name,
-i.e., without any path component. For example, including <tt>src/main/resources/a/b.c</tt> will result in a resource <tt>b.c</tt> in the root of the bundle JAR. If the <tt>PATH</tt>
-points to a directory, the entire directory hierarchy is copied into
-the resulting bundle JAR file relative to the specified directory. If a
-specific resource must be placed into a subdirectory of the bundle jar,
-then use the <tt>assignment</tt> form, where the first path is the the
-destination path (including file name if the resource is a file) and
-the second path is the resource to copy. The <tt>inline</tt> form requires a ZIP or JAR file, which will be completely expanded in the bundle JAR.</p>
+ form will place the resource in the bundle JAR with only the file name,
+ i.e., without any path component. For example, including <tt>src/main/resources/a/b.c</tt> will result in a resource <tt>b.c</tt> in the root of the bundle JAR. If the <tt>PATH</tt>
+ points to a directory, the entire directory hierarchy is copied into
+the resulting bundle JAR file relative to the specified directory. If a
+ specific resource must be placed into a subdirectory of the bundle jar,
+ then use the <tt>assignment</tt> form, where the first path is the the
+destination path (including file name if the resource is a file) and the
+ second path is the resource to copy. The <tt>inline</tt> form requires a ZIP or JAR file, which will be completely expanded in the bundle JAR.</p>
-<p>If a resource clause is specified inside of "{ ... }" brackets, then
-variable substitution will be performed on the resource, where
-variables in the resources are denoted with "${ ... }" syntax.</p>
+<p>If a resource clause is specified inside of "{ ... }" brackets, then
+variable substitution will be performed on the resource, where variables
+ in the resources are denoted with "${ ... }" syntax.</p>
<p>By default the bundle plugin converts the project's Maven resource directories into a single <tt><Include-Resource></tt> instruction. If you specify your own <tt><Include-Resource></tt> instruction, this will replace the generated one. To include the generated list of Maven resources in your own <tt><Include-Resource></tt> instruction just add {<tt>maven-resources</tt>} to the list and it will be expanded automatically.</p>
<h3><a name="ApacheFelixMavenBundlePlugin(BND)-{{<ImportPackage>}}"></a><tt><Import-Package></tt></h3>
-<p>The <tt><Import-Package></tt> instruction is a list of
-packages that are required by the bundle's contained packages. The
-default for this header is "*", resulting in importing all referred
-packages. This header rarely has to be explicitly specified. However,
-in certain cases when there is an unwanted import, such an import can
-be removed by using a negation package pattern. The package patterns
-work in the same way as for <tt><Export-Package></tt>, which means they are ordered. For example, if you wanted to import all packages except <tt>org.foo.impl</tt> you would specify "<tt>!org.foo.impl,*</tt>"</p>
+<p>The <tt><Import-Package></tt> instruction is a list of packages
+ that are required by the bundle's contained packages. The default for
+this header is "*", resulting in importing all referred packages. This
+header rarely has to be explicitly specified. However, in certain cases
+when there is an unwanted import, such an import can be removed by using
+ a negation package pattern. The package patterns work in the same way
+as for <tt><Export-Package></tt>, which means they are ordered. For example, if you wanted to import all packages except <tt>org.foo.impl</tt> you would specify "<tt>!org.foo.impl,*</tt>"</p>
<p><a name="ApacheFelixMavenBundlePlugin(BND)-defaultbehavior"></a></p>
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-DefaultBehavior"></a>Default Behavior</h2>
-<p>To use this plugin, very little information is required by BND. As
-part of the Maven integration, the plugin tries to set reasonable
+<p>To use this plugin, very little information is required by BND. As
+part of the Maven integration, the plugin tries to set reasonable
defaults for various instructions. For example:</p>
<ul>
- <li><tt><Bundle-SymbolicName></tt> is computed using the shared <a href="http://svn.apache.org/repos/asf/maven/shared/trunk/maven-osgi/src/main/java/org/apache/maven/shared/osgi/DefaultMaven2OsgiConverter.java" rel="nofollow">Maven2OsgiConverter</a> component, which uses the following algorithm:<br>
+ <li><tt><Bundle-SymbolicName></tt> is computed using the shared <a href="http://svn.apache.org/repos/asf/maven/shared/trunk/maven-osgi/src/main/java/org/apache/maven/shared/osgi/DefaultMaven2OsgiConverter.java" class="external-link" rel="nofollow">Maven2OsgiConverter</a> component, which uses the following algorithm:<br>
Get the symbolic name as groupId + "." + artifactId, with the following exceptions:
<ul>
- <li>if
-artifact.getFile is not null and the jar contains a OSGi Manifest with
-Bundle-SymbolicName property then that value is returned</li>
- <li>if
-groupId has only one section (no dots) and artifact.getFile is not null
-then the first package name with classes is returned. eg.
+ <li>if artifact.getFile is not null and the jar contains a OSGi
+Manifest with Bundle-SymbolicName property then that value is returned</li>
+ <li>if groupId has only one section (no dots) and artifact.getFile is
+not null then the first package name with classes is returned. eg.
commons-logging:commons-logging -> org.apache.commons.logging</li>
<li>if artifactId is equal to last section of groupId then groupId is returned. eg. org.apache.maven:maven -> org.apache.maven</li>
- <li>if
-artifactId starts with last section of groupId that portion is removed.
-eg. org.apache.maven:maven-core -> org.apache.maven.core<br>
+ <li>if artifactId starts with last section of groupId that portion is
+removed. eg. org.apache.maven:maven-core -> org.apache.maven.core<br>
The computed symbolic name is also stored in the <tt>$(maven-symbolicname)</tt> property in case you want to add attributes or directives to it.</li>
</ul>
</li>
- <li><tt><Export-Package></tt>
-is now assumed to be the set of packages in your local Java sources,
-excluding the default package '.' and any packages containing 'impl' or
-'internal'.<br>
+ <li><tt><Export-Package></tt> is now assumed to be the set of
+packages in your local Java sources, excluding the default package '.'
+and any packages containing 'impl' or 'internal'.<br>
<em>(before version 2 of the bundleplugin it was based on the symbolic name)</em></li>
+ <li>Since 2.2.0 you can also use {<tt>local-packages</tt>} inside <tt><Export-Package></tt> and it will be expanded to the set of local packages.</li>
<li><tt><Private-Package></tt> is now assumed to be the set of packages in your local Java sources (note that any packages in both <tt><Export-Package></tt> and <tt><Private-Package></tt> will be exported).<br>
<em>(before version 2 of the bundleplugin it was assumed to be empty by default)</em></li>
<li><tt><Import-Package></tt> is assumed to be "<tt>*</tt>", which imports everything referred to by the bundle content, but not contained in the bundle.<br>
<em>Any exported packages are also imported by default, to ensure a consistent class space.</em></li>
<li><tt><Include-Resource></tt> is generated from the project's Maven resources, typically "<tt>src/main/resources/</tt>",
-which will copy the specified project directory hierarchy into the
+ which will copy the specified project directory hierarchy into the
resulting bundle JAR file, mirroring standard Maven behavior.</li>
<li><tt><Bundle-Version></tt> is assumed to be "<tt>${pom.version</tt>}" but is normalized to the OSGi version format of "<tt>MAJOR.MINOR.MICRO.QUALIFIER</tt>", for example "<tt>2.1-SNAPSHOT</tt>" would become "<tt>2.1.0.SNAPSHOT</tt>".</li>
<li><tt><Bundle-Name></tt> is assumed to be "<tt>${pom.name</tt>}".</li>
@@ -864,9 +237,9 @@
<p>Since the plugin creates bundles for OSGi R4, it hard-codes <tt>Bundle-ManifestVersion</tt>
-to be '2'. Additionally, it generates imports for every export to
-ensure package substitutability, which is very important when working
-with collaborating services. It is possible to override any of these
+ to be '2'. Additionally, it generates imports for every export to
+ensure package substitutability, which is very important when working
+with collaborating services. It is possible to override any of these
values (except <tt>Bundle-ManifestVersion</tt>) just by specifying the desired value in the plugin configuration section of the POM file.</p>
<p><a name="ApacheFelixMavenBundlePlugin(BND)-howto"></a></p>
@@ -875,15 +248,15 @@
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-GetMaven2"></a>Get Maven2</h2>
-<p>The first step in the process of using the plugin is downloading and
-installing the latest version of the Maven2 runtime. The latest Maven2
-release and instuctions for getting started with Maven2 can be found at
-the <a href="http://maven.apache.org/index.html" rel="nofollow">Maven website</a>.</p>
+<p>The first step in the process of using the plugin is downloading and
+installing the latest version of the Maven2 runtime. The latest Maven2
+release and instuctions for getting started with Maven2 can be found at
+the <a href="http://maven.apache.org/index.html" class="external-link" rel="nofollow">Maven website</a>.</p>
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-UsingthePlugin"></a>Using the Plugin</h2>
-<p>To use the maven-bundle-plugin, you first need to add the plugin and
-some appropriate plugin configuration to your bundle project's POM.
+<p>To use the maven-bundle-plugin, you first need to add the plugin and
+some appropriate plugin configuration to your bundle project's POM.
Below is an example of a simple OSGi bundle POM for Maven2:</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
@@ -922,18 +295,18 @@
</div></div>
<p>There are two main things to note: (1) the <tt><packaging></tt>
-specifier must be "bundle" and (2) the plugin and configuration must be
-specified (the configuration section is where you will issue
+ specifier must be "bundle" and (2) the plugin and configuration must be
+ specified (the configuration section is where you will issue
instructions to the plugin).</p>
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-RealWorldExample"></a>Real-World Example</h2>
-<p>Consider this more real-world example using Felix' Log Service
-implementation. The Log Service project is comprised of a single
-package: <tt>org.apache.felix.log.impl</tt>. It has a dependency on
-the core OSGi interfaces as well as a dependency on the compendium OSGi
-interfaces for the specific log service interfaces. The following is
-its POM file:</p>
+<p>Consider this more real-world example using Felix' Log Service
+implementation. The Log Service project is comprised of a single
+package: <tt>org.apache.felix.log.impl</tt>. It has a dependency on the
+core OSGi interfaces as well as a dependency on the compendium OSGi
+interfaces for the specific log service interfaces. The following is its
+ POM file:</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre><project>
@@ -980,16 +353,15 @@
</pre>
</div></div>
-<p>Notice that the <tt><Export-Package></tt> instruction
-specifies that the bundle exports the Log Service package, even though
-this package is not contained in the bundle project. By declaring this,
-the plugin will copy the Log Service package into the resulting bundle
-JAR file. This is useful in this case because now the bundle can
-resolve without having to download the entire compendium bundle. The
-resulting manifest for the Log Service bundle looks like this (notice
-how the imports/exports automatically have version information
-associated with them, which was obtained from packageinfo files in the
-source packages):</p>
+<p>Notice that the <tt><Export-Package></tt> instruction specifies
+ that the bundle exports the Log Service package, even though this
+package is not contained in the bundle project. By declaring this, the
+plugin will copy the Log Service package into the resulting bundle JAR
+file. This is useful in this case because now the bundle can resolve
+without having to download the entire compendium bundle. The resulting
+manifest for the Log Service bundle looks like this (notice how the
+imports/exports automatically have version information associated with
+them, which was obtained from packageinfo files in the source packages):</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>Manifest-Version: 1
@@ -1012,7 +384,7 @@
</pre>
</div></div>
-<p>The resulting bundle JAR file has the following content (notice how
+<p>The resulting bundle JAR file has the following content (notice how
the LICENSE and NOTICE files were automatically copied from the <tt>src/main/resources/</tt> directory of the project):</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
@@ -1116,9 +488,9 @@
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-BuildingthePlugin"></a>Building the Plugin</h2>
-<p>The plugin is hosted at the Apache Felix project. The following
-steps describe how to build and install the plugin into your local
-Maven2 repository.</p>
+<p>The plugin is hosted at the Apache Felix project. The following steps
+ describe how to build and install the plugin into your local Maven2
+repository.</p>
<p>Using the SVN client of your choice, checkout the maven-bundle-plugin project.</p>
@@ -1127,8 +499,8 @@
</pre>
</div></div>
-<p>Using Maven2, build and install the maven-bundle-plugin by issuing
-the following Maven2 command in the project directory that was created
+<p>Using Maven2, build and install the maven-bundle-plugin by issuing
+the following Maven2 command in the project directory that was created
as a result of the previous step.</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
@@ -1138,8 +510,8 @@
<h1><a name="ApacheFelixMavenBundlePlugin(BND)-Goals"></a>Goals</h1>
-<p>The maven-bundle-plugin also provides additional functionality via
-some Maven goals. Command-line execution of a goal is performed as
+<p>The maven-bundle-plugin also provides additional functionality via
+some Maven goals. Command-line execution of a goal is performed as
follows:</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
@@ -1306,8 +678,8 @@
</ul>
-<p>There are also new instructions available from the underlying BND
-tool, which continues to be improved independently; for the latest see <a href="http://aqute.biz/Code/Bnd" rel="nofollow">BND documentation</a>.</p>
+<p>There are also new instructions available from the underlying BND
+tool, which continues to be improved independently; for the latest see <a href="http://aqute.biz/Code/Bnd" class="external-link" rel="nofollow">BND documentation</a>.</p>
<p>The default goal <b><tt>bundle</tt></b> will be initialized by setting the <packaging> entry to "bundle".</p>
@@ -1335,11 +707,11 @@
</div></div>
<p>The plugin uses the <tt><Embed-Dependency></tt> instruction to transform the project dependencies into <tt><Include-Resource></tt> and <tt><Bundle-ClassPath></tt>
-clauses, which are then appended to the current set of instructions and
-passed onto BND. If you want the embedded dependencies to be at the
+ clauses, which are then appended to the current set of instructions and
+ passed onto BND. If you want the embedded dependencies to be at the
start or middle of <tt><Include-Resource></tt> or <tt><Bundle-ClassPath></tt> then you can use {<tt>maven-dependencies</tt>}, which will automatically expand to the relevant clauses.</p>
-<p>The MATCH section accepts alternatives, separated by <b>|</b>, and can be negated by using <b>!</b> at the <em>beginning</em> of the MATCH. Use <b>*</b> to represent zero or more unknown characters and <b>?</b> to represent a single unknown character. There is no need to escape the <b>.</b> character inside MATCH. The first MATCH in a clause will filter against the artifactId.</p>
+<p>The MATCH section accepts alternatives, separated by <b>|</b>, and can be negated by using <b>!</b> at the <em>beginning</em> of the MATCH. Use <b>*</b> to represent zero or more unknown characters and <b>?</b> to represent zero or one character. You can also use standard Java <a href="http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html" class="external-link" rel="nofollow">regexp</a> constructs. There is no need to escape the <b>.</b> character inside MATCH. The first MATCH in a clause will filter against the artifactId.</p>
<p>some examples:</p>
@@ -1382,8 +754,8 @@
</ul>
-<p>Normally the plugin only checks direct dependencies, but this can be
-changed to include the complete set of transitive dependencies with the
+<p>Normally the plugin only checks direct dependencies, but this can be
+changed to include the complete set of transitive dependencies with the
following option:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
@@ -1401,17 +773,17 @@
<h3><a name="ApacheFelixMavenBundlePlugin(BND)-EmbedDependencyandExportPackage"></a>Embed-Dependency and Export-Package</h3>
<p>If you embed a dependency with <tt><Embed-Dependency></tt>, and your <tt><Export-Package></tt> or <tt><Private-Package></tt> instructions match packages inside the embedded jar, you will see some duplication inside the bundle. This is because the <tt><Export-Package></tt> and <tt><Private-Package></tt>
-instructions will result in classes being inlined in the bundle, even
-though they also exist inside the embedded jar. If you want to export
-packages from an embedded dependency without such duplication then you
+ instructions will result in classes being inlined in the bundle, even
+though they also exist inside the embedded jar. If you want to export
+packages from an embedded dependency without such duplication then you
can either inline the dependency, or use a new BND instruction called <tt><_exportcontents></tt>.</p>
<p><tt><_exportcontents></tt> behaves just like Export-Package, except it doesn't change the content of the bundle, just what content should be exported.</p>
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-OBRintegration"></a>OBR integration</h2>
-<p>The latest Maven Bundle Plugin automatically updates the local OBR
-repository.xml file during the install phase, using a default location
+<p>The latest Maven Bundle Plugin automatically updates the local OBR
+repository.xml file during the install phase, using a default location
of:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
@@ -1458,11 +830,11 @@
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-Eclipse/PDEintegration"></a>Eclipse/PDE integration</h2>
-<p>It is possible to configure the Maven Bundle Plugin to put the
-bundle manifest where Eclipse/PDE expects it, and use the Maven
-Dependency Plugin to arrange for any embedded dependencies to appear in
-a local directory that matches the Bundle-ClassPath entries. Here is an
-example POM that does this:</p>
+<p>It is possible to configure the Maven Bundle Plugin to put the bundle
+ manifest where Eclipse/PDE expects it, and use the Maven Dependency
+Plugin to arrange for any embedded dependencies to appear in a local
+directory that matches the Bundle-ClassPath entries. Here is an example
+POM that does this:</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre><project>
@@ -1574,7 +946,7 @@
<p>and you should now be able to import this as an existing Eclipse project.</p>
-<p>FYI: the above POM was generated using the <tt>pax-create-bundle</tt> command from <a href="http://www.ops4j.org/projects/pax/construct/index.html" rel="nofollow">Pax-Construct</a> and then tweaked to demonstrate using the Maven Dependency Plugin to handle embedded jars in Eclipse.</p>
+<p>FYI: the above POM was generated using the <tt>pax-create-bundle</tt> command from <a href="http://www.ops4j.org/projects/pax/construct/index.html" class="external-link" rel="nofollow">Pax-Construct</a> and then tweaked to demonstrate using the Maven Dependency Plugin to handle embedded jars in Eclipse.</p>
<p>With the original Pax-Construct generated POM you would simply use:</p>
@@ -1583,20 +955,20 @@
</pre>
</div></div>
-<p>to create the appropriate Eclipse files and manifest, and also
-handle any embedded entries. The pax:eclipse goal extends
-eclipse:eclipse, and supports the same parameters.</p>
+<p>to create the appropriate Eclipse files and manifest, and also handle
+ any embedded entries. The pax:eclipse goal extends eclipse:eclipse, and
+ supports the same parameters.</p>
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-Unpackingbundlecontentsto'target/classes'"></a>Unpacking bundle contents to 'target/classes'</h2>
<p>Once in a while you may create a bundle which contains additional classes to the ones compiled from <tt>src/main/java</tt>,
-for example when you embed the classes from another jar. This can
-sometimes cause unforeseen problems in Maven, as it will use the output
+ for example when you embed the classes from another jar. This can
+sometimes cause unforeseen problems in Maven, as it will use the output
directory (<tt>target/classes</tt>) rather than the final bundle, when compiling against projects in the same reactor (ie. the same build).</p>
-<p>The easiest way to get around this Maven 'feature' is to unpack the
-contents of the bundle to the output directory after the packaging
-step, so the additional classes will be found where Maven expects them.
+<p>The easiest way to get around this Maven 'feature' is to unpack the
+contents of the bundle to the output directory after the packaging step,
+ so the additional classes will be found where Maven expects them.
Thankfully there is now an easy option to do this in the bundle-plugin:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
@@ -1622,9 +994,9 @@
</pre>
</div></div>
-<p>Bnd will use it when calculating the bundle contents, and will also
+<p>Bnd will use it when calculating the bundle contents, and will also
copy across all manifest attributes starting with a capital letter.<br>
-As shown in the above example, you could use this to include a non-OSGi
+As shown in the above example, you could use this to include a non-OSGi
manifest which you then customize with extra OSGi attributes.</p>
<h1><a name="ApacheFelixMavenBundlePlugin(BND)-Thefollowingfeaturesareonlyavailablefromversion1.4.0onwards"></a>The following features are only available from version 1.4.0 onwards</h1>
@@ -1633,8 +1005,8 @@
<p>The <b>ant</b> goal creates a customized <tt>build.xml</tt> Ant script along with a collection of BND instructions and properties, taken from the current project and stored in <tt>maven-build.bnd</tt>. You also need to run <b><tt>ant:ant</tt></b> to create the standard Ant support tasks to download Maven dependencies and perform compilation, etc.</p>
-<p>The customized Ant script uses the BND tool to rebuild the bundle,
-so any source changes should be reflected in the (re)generated manifest.</p>
+<p>The customized Ant script uses the BND tool to rebuild the bundle, so
+ any source changes should be reflected in the (re)generated manifest.</p>
<p>Example:</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
@@ -1671,9 +1043,9 @@
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-bundle:deploy"></a>bundle:deploy</h2>
-<p>The <b>deploy goal</b> updates the remote OBR with the details of
-the deployed bundle from the local Maven repository. The remote OBR is
-found by querying the <tt><distributionManagement></tt> section of the project, unless <tt>-DaltDeploymentRepository</tt> is set. See <a href="http://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html" rel="nofollow">http://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html</a> for more details about these particular settings.</p>
+<p>The <b>deploy goal</b> updates the remote OBR with the details of the
+ deployed bundle from the local Maven repository. The remote OBR is
+found by querying the <tt><distributionManagement></tt> section of the project, unless <tt>-DaltDeploymentRepository</tt> is set. See <a href="http://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html" class="external-link" rel="nofollow">http://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html</a> for more details about these particular settings.</p>
<p>(If the project has an <tt>obr.xml</tt> file somewhere in its resources, then it will be automatically detected and applied.)</p>
@@ -1690,7 +1062,7 @@
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-bundle:deployfile"></a>bundle:deploy-file</h2>
-<p>The <b>deploy-file</b> goal updates the remote OBR with the details of a deployed bundle from the local filesystem. The remote OBR is found using the <tt>-DrepositoryId</tt> and <tt>-Durl</tt> parameters. See <a href="http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html" rel="nofollow">http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html</a> for more details about these particular settings.</p>
+<p>The <b>deploy-file</b> goal updates the remote OBR with the details of a deployed bundle from the local filesystem. The remote OBR is found using the <tt>-DrepositoryId</tt> and <tt>-Durl</tt> parameters. See <a href="http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html" class="external-link" rel="nofollow">http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html</a> for more details about these particular settings.</p>
<p>You can use the <tt>-DbundleUrl</tt> parameter to give the public location of the deployed bundle, which may differ from the remote OBR location.</p>
@@ -1732,11 +1104,11 @@
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-bundle:clean"></a>bundle:clean</h2>
-<p>Sometimes you would like to clean your local OBR because it contains
-bundles that are no longer in your local Maven repository. This case
-often occurs when artifacts were deleted manually. The
-maven-bundle-plugin provides a simple goal to check for missing
-bundles, and remove them from the local OBR.</p>
+<p>Sometimes you would like to clean your local OBR because it contains
+bundles that are no longer in your local Maven repository. This case
+often occurs when artifacts were deleted manually. The
+maven-bundle-plugin provides a simple goal to check for missing bundles,
+ and remove them from the local OBR.</p>
<p>configuration:</p>
<ul>
@@ -1750,13 +1122,39 @@
</pre>
</div></div>
+<h2><a name="ApacheFelixMavenBundlePlugin(BND)-bundle:index"></a>bundle:index</h2>
+
+<p>The <tt>index</tt> goal allows the creation of an OBR repository based on a set of jars in a maven repository.</p>
+
+<p>Configuration:</p>
+<ul>
+ <li><em>obrRepository</em> path to local OBR, defaults to <em><local-maven-repository></em><tt>/repository.xml</tt></li>
+ <li><em>urlTemplate</em> template for generating urls for OBR resources</li>
+ <li><em>mavenRepository</em> path to the maven repository, defaults to <em><local-maven-repository></em></li>
+</ul>
+
+
+<p>Possible values for the <tt>urlTemplate</tt> are:</p>
+<ul>
+ <li><em>maven</em> this will create a maven based url such as <tt>mvn:groupid/artifactid/version</tt></li>
+ <li>pattern with the following placeholders:
+ <ul>
+ <li><tt>%v</tt> bundle version</li>
+ <li><tt>%s</tt> bundle symbolic name</li>
+ <li><tt>%f</tt> file name</li>
+ <li><tt>%p</tt> file path</li>
+ </ul>
+ </li>
+</ul>
+
+
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-Concurrentupdates"></a>Concurrent updates</h2>
-<p>With a remote OBR, several uploads may occur at the same time.
-However, the remote OBR is centralized in one file, so concurrent
-modification must be avoided. To achieve this, the plug-in implements a
-locking system. Each time the plug-in tries to modify the file it sets
-a file based lock. If it can't take the lock, it will wait and retry.
+<p>With a remote OBR, several uploads may occur at the same time.
+However, the remote OBR is centralized in one file, so concurrent
+modification must be avoided. To achieve this, the plug-in implements a
+locking system. Each time the plug-in tries to modify the file it sets a
+ file based lock. If it can't take the lock, it will wait and retry.
After 3 attempts the upload process fails. To bypass this lock add <tt>-DignoreLock</tt> to the command-line (or add <tt><ignoreLock>true<ignoreLock></tt> to the configuration section of your Pom).</p>
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-FTPprotocol"></a>FTP protocol</h2>
@@ -1799,14 +1197,24 @@
<h2><a name="ApacheFelixMavenBundlePlugin(BND)-Knownissues&limitations"></a>Known issues & limitations</h2>
<ol>
- <li>obr.xml (file given by the user to add properties not found
-by Bindex) must be correct, because the plug-in does not check its
-syntax.</li>
+ <li>obr.xml (file given by the user to add properties not found by
+Bindex) must be correct, because the plug-in does not check its syntax.</li>
</ol>
<h1><a name="ApacheFelixMavenBundlePlugin(BND)-Feedback"></a>Feedback</h1>
-<p>Subscribe to the Felix users mailing list by sending a message to <a href="mailto:users-subscribe@felix.apache.org" rel="nofollow">users-subscribe@felix.apache.org</a>; after subscribing, email questions or feedback to <a href="mailto:users@felix.apache.org" rel="nofollow">users@felix.apache.org</a>.</p>
+<p>Subscribe to the Felix users mailing list by sending a message to <a href="mailto:users-subscribe@felix.apache.org" class="external-link" rel="nofollow">users-subscribe@felix.apache.org</a>; after subscribing, email questions or feedback to <a href="mailto:users@felix.apache.org" class="external-link" rel="nofollow">users@felix.apache.org</a>.</p>
+ <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
+Last modified by mcculls on Fri Nov 18 12:18:15 EST 2011
+ </div>
+ <div class="trademarkFooter">
+Apache Felix, Felix, Apache, the Apache feather logo, and the Apache
+Felix project logo are trademarks of The Apache Software Foundation. All
+ other marks mentioned may be trademarks or registered trademarks of
+their respective owners.
+ </div>
</div>
- </body></html>
\ No newline at end of file
+
+
+</body></html>
\ No newline at end of file