felix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pa...@apache.org
Subject svn commit: r554078 - in /felix/trunk/bundleplugin/doc: ./ maven-bundle-plugin-bnd_files/
Date Fri, 06 Jul 2007 22:36:20 GMT
Author: pauls
Date: Fri Jul  6 15:36:17 2007
New Revision: 554078

URL: http://svn.apache.org/viewvc?view=rev&rev=554078
Add a copy of the current bundle plugin documentation to svn

    felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/apache-felix-small.png   (with
    felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/linkext7.gif   (with props)

Added: felix/trunk/bundleplugin/doc/changelog.txt
URL: http://svn.apache.org/viewvc/felix/trunk/bundleplugin/doc/changelog.txt?view=auto&rev=554078
--- felix/trunk/bundleplugin/doc/changelog.txt (added)
+++ felix/trunk/bundleplugin/doc/changelog.txt Fri Jul  6 15:36:17 2007
@@ -0,0 +1,23 @@
+Changes from 0.8.0-incubator to 1.0.0
+* [2007-03-13] <Include-Resources> now supports JAR files in the class path,
+not just JAR files in the project directory.
+* [2007-03-15] Fixed a bug in converting Maven version numbers to OSGi version
+numbers (FELIX-256).
+* [2007-03-28] Added support for using BND directives in the POM file
+* [2007-04-10] Added a recursive "bundleall" goal to generate OSGi bundles for
+all dependencies and a "manifest" goal to generate just the manifest
+* [2007-04-27] Modified the plugin so that it does not run on POM projects
+* [2007-05-17] Plugin now handles null property values better (FELIX-281).
+* [2007-05-20] Renamed project directory from maven-bundle-plugin to
+* [2007-05-20] Changed package naming.
+* [2007-05-21] Improved handling of resource copying to copy the plugin's
+resources if specified or the standard Maven-specified resources (FELIX-261).
+* [2007-05-24] Updated to BND version 0.0.145.
+* [2007-06-13] Factored out some common code (FELIX-304).
+* [2007-06-14] Enable output folder to be configured (FELIX-305).
+* [2007-07-05] Added support for overriding project type (FELIX-309).

Added: felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd.html
URL: http://svn.apache.org/viewvc/felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd.html?view=auto&rev=554078
--- felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd.html (added)
+++ felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd.html Fri Jul  6 15:36:17 2007
@@ -0,0 +1,434 @@
+<!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</title>
+    <link rel="stylesheet" href="maven-bundle-plugin-bnd_files/site.css" type="text/css"
+    <link rel="stylesheet" href="maven-bundle-plugin-bnd_files/print.html" type="text/css"
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"></head><body>
+    <div class="title">
+      <img alt="Logo" src="maven-bundle-plugin-bnd_files/apache-felix-small.png" align="right">
+    </div>
+    <div class="menu">
+      <ul>
+        <li><a href="http://cwiki.apache.org/FELIX/index.html">home</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/news.html">news</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/status.html">status</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/license.html">license</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/downloads.html">downloads</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/documentation.html">documentation</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/committers.html">committers</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/mailinglists.html">mailing
+        <li><a href="http://cwiki.apache.org/FELIX/faq.html">faq</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/roadmap.html">roadmap</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/sourcecode.html">source code</a></li>
+        <li><a href="http://cwiki.apache.org/FELIX/codingstandards.html">coding
+        <li><a href="http://cwiki.apache.org/FELIX/issuetracking.html">issue
+        <li><a href="http://cwiki.apache.org/FELIX/dependencies.html">dependencies</a></li>
+      </ul>
+    </div>
+    <div class="main">
+<h1><a name="MavenBundlePlugin(BND)-BundlePluginforMaven"></a>Bundle Plugin
for Maven</h1>
+<p>This plugin for Maven 2 is based on the <span class="nobr"><a href="http://www.aqute.biz/Code/Bnd"
title="Visit page outside Confluence" rel="nofollow">BND<sup><img class="rendericon"
src="maven-bundle-plugin-bnd_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7"
+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><a name="MavenBundlePlugin(BND)-simpleexample"></a></p>
+<h1><a name="MavenBundlePlugin(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
+immediate flavor. A detailed "<a href="#MavenBundlePlugin%2528BND%2529-howto" title="how-to
on Maven Bundle Plugin (BND)">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>
+<div class="preformatted"><div class="preformattedContent">
+<p>If we also assume that we have a bundle activator in one of the implementation packages,
then the <tt>&lt;plugins&gt;</tt> section of the POM file for this bundle
project would look like this:</p>
+<div class="preformatted"><div class="preformattedContent">
+  &lt;plugin&gt;
+    &lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
+    &lt;artifactId&gt;maven-bundle-plugin&lt;/artifactId&gt;
+    &lt;extensions&gt;true&lt;/extensions&gt;
+    &lt;configuration&gt;
+      &lt;instructions&gt;
+        &lt;Export-Package&gt;org.foo.myproject.api&lt;/Export-Package&gt;
+        &lt;Private-Package&gt;org.foo.myproject.*&lt;/Private-Package&gt;
+        &lt;Bundle-Activator&gt;org.foo.myproject.impl1.Activator&lt;/Bundle-Activator&gt;
+      &lt;/instructions&gt;
+    &lt;/configuration&gt;
+  &lt;/plugin&gt;
+<p>The <tt>&lt;Export-Package&gt;</tt> and <tt>&lt;Private-Package&gt;</tt>
instructions tell the plugin about the contents of the resulting bundle JAR file. The <tt>&lt;Export-Package&gt;</tt>
instruction tells the plugin which of the available packages to copy into the bundle <b>and</b>
export, while the <tt>&lt;Private-Package&gt;</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="#MavenBundlePlugin%2528BND%2529-defaultbehavior" title="default-behavior
on Maven Bundle Plugin (BND)">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="MavenBundlePlugin(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
+the plugin configuration section of the POM file, as was illustrated <a href="#MavenBundlePlugin%2528BND%2529-simpleexample"
title="simple-example on Maven Bundle Plugin (BND)">above</a>. BND recognizes three
types of instructions:</p>
+	<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>
+<p>The remainder of this section covers the most important aspects of BND's instructions;
for complete details refer to the <span class="nobr"><a href="http://www.aqute.biz/Code/Bnd"
title="Visit page outside Confluence" rel="nofollow">BND documentation<sup><img
class="rendericon" src="maven-bundle-plugin-bnd_files/linkext7.gif" alt="" align="absmiddle"
border="0" height="7" width="7"></sup></a></span>.</p>
+<p><a name="MavenBundlePlugin(BND)-instructions"></a></p>
+<h2><a name="MavenBundlePlugin(BND)-Instructions"></a>Instructions</h2>
+<h3><a name="MavenBundlePlugin(BND)-{{&lt;ExportPackage&gt;}}"></a><tt>&lt;Export-Package&gt;</tt></h3>
+<p>The <tt>&lt;Export-Package&gt;</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>&lt;Export-Package&gt;</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
+examining the source JAR file or from <tt>packageinfo</tt> files in the package
+<h3><a name="MavenBundlePlugin(BND)-{{&lt;PrivatePackage&gt;}}"></a><tt>&lt;Private-Package&gt;</tt></h3>
+<p>The <tt>&lt;Private-Package&gt;</tt> instruction is similar
in every way to the <tt>&lt;Export-Package&gt;</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
+and private package headers, then the export takes precedence.</p>
+<h3><a name="MavenBundlePlugin(BND)-{{&lt;IncludeResource&gt;}}"></a><tt>&lt;Include-Resource&gt;</tt></h3>
+<p>The <tt>&lt;Include-Resource&gt;</tt> instruction is a list
+arbitrary resources that should be copied into the bundle JAR file. The
+specified resources are declared as clauses that can have the following
+<div class="preformatted"><div class="preformattedContent">
+<pre>clause ::= assignment | inline | simple
+assignment ::= PATH '=' PATH
+simple ::= PATH
+inline ::= '@' PATH
+<p>For the <tt>&lt;Include-Resource&gt;</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>
+<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>
+<h3><a name="MavenBundlePlugin(BND)-{{&lt;ImportPackage&gt;}}"></a><tt>&lt;Import-Package&gt;</tt></h3>
+<p>The <tt>&lt;Import-Package&gt;</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>&lt;Export-Package&gt;</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="MavenBundlePlugin(BND)-defaultbehavior"></a></p>
+<h2><a name="MavenBundlePlugin(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
+defaults for various instructions. For example:</p>
+	<li><tt>&lt;Bundle-SymbolicName&gt;</tt> is assumed to be "<tt>${groupId}.${artifactId</tt>}".</li>
+	<li><tt>&lt;Export-Package&gt;</tt> is assumed to be "<tt>${groupId}.${artifactId}.*</tt>",
unless <tt>&lt;Private-Package&gt;</tt> is specified, then <tt>&lt;Export-Package&gt;</tt>
is assumed to be empty.</li>
+	<li><tt>&lt;Private-Package&gt;</tt> is assumed to be empty by
+	<li><tt>&lt;Import-Package&gt;</tt> is assumed to be "<tt>*</tt>",
which imports everything referred to by the bundle content, but not contained in the bundle.</li>
+	<li><tt>&lt;Include-Resource&gt;</tt> is assumed to be "<tt>src/main/resources/</tt>",
+which will copy the specified project directory hierarchy into the
+resulting bundle JAR file, mirroring standard Maven behavior.</li>
+	<li><tt>&lt;Bundle-Version&gt;</tt> is assumed to be "<tt>${pom.version</tt>}"
with '-' character separator of the qualifier replaced with a '.' character.</li>
+	<li><tt>&lt;Bundle-Name&gt;</tt> is assumed to be "<tt>${pom.name</tt>}".</li>
+	<li><tt>&lt;Bundle-Description&gt;</tt> is assumed to be "<tt>${pom.description</tt>}".</li>
+	<li><tt>&lt;Bundle-License&gt;</tt> is assumed to be "<tt>${pom.licenses</tt>}".</li>
+	<li><tt>&lt;Bundle-Vendor&gt;</tt> is assumed to be "<tt>${pom.organization.name</tt>}".</li>
+	<li><tt>&lt;Bundle-DocURL&gt;</tt> is assumed to be "<tt>${pom.organization.url</tt>}".</li>
+<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
+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="MavenBundlePlugin(BND)-howto"></a></p>
+<h1><a name="MavenBundlePlugin(BND)-Detailed&quot;HowTo&quot;"></a>Detailed
"How To"</h1>
+<h2><a name="MavenBundlePlugin(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 <span class="nobr"><a href="http://maven.apache.org/index.html" title="Visit
page outside Confluence" rel="nofollow">Maven website<sup><img class="rendericon"
src="maven-bundle-plugin-bnd_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7"
+<h2><a name="MavenBundlePlugin(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.
+Below is an example of a simple OSGi bundle POM for Maven2:</p>
+<div class="preformatted"><div class="preformattedContent">
+  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
+  &lt;groupId&gt;my-osgi-bundles&lt;/groupId&gt;
+  &lt;artifactId&gt;examplebundle&lt;/artifactId&gt;
+  &lt;packaging&gt;bundle&lt;/packaging&gt;    &lt;!-- (1) --&gt;
+  &lt;version&gt;1.0&lt;/version&gt;
+  &lt;name&gt;Example Bundle&lt;/name&gt;
+  &lt;dependencies&gt;
+    &lt;dependency&gt;
+      &lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
+      &lt;artifactId&gt;org.osgi.core&lt;/artifactId&gt;
+      &lt;version&gt;0.8.0-incubator&lt;/version&gt;
+    &lt;/dependency&gt;
+  &lt;/dependencies&gt;
+  &lt;build&gt;
+    &lt;plugins&gt;
+      &lt;plugin&gt;    &lt;!-- (2) START --&gt;
+        &lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
+        &lt;artifactId&gt;maven-bundle-plugin&lt;/artifactId&gt;
+        &lt;extensions&gt;true&lt;/extensions&gt;
+        &lt;configuration&gt;
+          &lt;instructions&gt;
+            &lt;Export-Package&gt;com.my.company.api&lt;/Export-Package&gt;
+            &lt;Private-Package&gt;com.my.company.*&lt;/Private-Package&gt;
+            &lt;Bundle-Activator&gt;com.my.company.Activator&lt;/Bundle-Activator&gt;
+          &lt;/instructions&gt;
+        &lt;/configuration&gt;
+      &lt;/plugin&gt;    &lt;!-- (2) END --&gt;
+    &lt;/plugins&gt;
+  &lt;/build&gt;
+  &lt;repositories&gt;
+    &lt;repository&gt;    &lt;!-- (3) START --&gt;
+      &lt;id&gt;apache.m2.incubator&lt;/id&gt;
+      &lt;name&gt;Apache M2 Incubator Repository&lt;/name&gt;
+      &lt;url&gt;http://people.apache.org/repo/m2-incubating-repository/&lt;/url&gt;
+    &lt;/repository&gt;   &lt;!-- (3) END --&gt;
+  &lt;/repositories&gt;
+  &lt;pluginRepositories&gt;
+    &lt;pluginRepository&gt;    &lt;!-- (4) START --&gt;
+      &lt;id&gt;apache.m2.incubator&lt;/id&gt;
+      &lt;name&gt;Apache M2 Incubator Repository&lt;/name&gt;
+      &lt;url&gt;http://people.apache.org/repo/m2-incubating-repository/&lt;/url&gt;
+    &lt;/pluginRepository&gt;   &lt;!-- (4) END --&gt;
+  &lt;/pluginRepositories&gt;
+<p>There are four main things to note: (1) the <tt>&lt;packaging&gt;</tt>
+specifier must be "bundle", (2) the plugin and configuration must be
+specified (the configuration section is where you will issue
+instructions to the plugin), and the snapshot repository to resolve
+dependencies (3) and plugins (4).</p>
+<h2><a name="MavenBundlePlugin(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>
+<div class="preformatted"><div class="preformattedContent">
+  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
+  &lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
+  &lt;artifactId&gt;org.apache.felix.log&lt;/artifactId&gt;
+  &lt;packaging&gt;bundle&lt;/packaging&gt;
+  &lt;name&gt;Apache Felix Log Service&lt;/name&gt;
+  &lt;version&gt;0.8.0-SNAPSHOT&lt;/version&gt;
+  &lt;description&gt;
+    This bundle provides an implementation of the OSGi R4 Log service.
+  &lt;/description&gt;
+  &lt;dependencies&gt;
+    &lt;dependency&gt;
+      &lt;groupId&gt;${pom.groupId}&lt;/groupId&gt;
+      &lt;artifactId&gt;org.osgi.core&lt;/artifactId&gt;
+      &lt;version&gt;0.8.0-incubator&lt;/version&gt;
+    &lt;/dependency&gt;
+    &lt;dependency&gt;
+      &lt;groupId&gt;${pom.groupId}&lt;/groupId&gt;
+      &lt;artifactId&gt;org.osgi.compendium&lt;/artifactId&gt;
+      &lt;version&gt;0.9.0-incubator-SNAPSHOT&lt;/version&gt;
+    &lt;/dependency&gt;
+  &lt;/dependencies&gt;
+  &lt;build&gt;
+    &lt;plugins&gt;
+      &lt;plugin&gt;
+        &lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
+        &lt;artifactId&gt;maven-bundle-plugin&lt;/artifactId&gt;
+        &lt;extensions&gt;true&lt;/extensions&gt;
+        &lt;configuration&gt;
+          &lt;instructions&gt;
+            &lt;Export-Package&gt;org.osgi.service.log&lt;/Export-Package&gt;
+            &lt;Private-Package&gt;org.apache.felix.log.impl&lt;/Private-Package&gt;
+            &lt;Bundle-SymbolicName&gt;${pom.artifactId}&lt;/Bundle-SymbolicName&gt;
+            &lt;Bundle-Activator&gt;${pom.artifactId}.impl.Activator&lt;/Bundle-Activator&gt;
+            &lt;Export-Service&gt;org.osgi.service.log.LogService,org.osgi.service.log.LogReaderService&lt;/Export-Service&gt;
+          &lt;/instructions&gt;
+        &lt;/configuration&gt;
+      &lt;/plugin&gt;
+    &lt;/plugins&gt;
+  &lt;/build&gt;
+  &lt;repositories&gt;
+    &lt;repository&gt;
+      &lt;id&gt;apache.m2.incubator&lt;/id&gt;
+      &lt;name&gt;Apache M2 Incubator Repository&lt;/name&gt;
+      &lt;url&gt;http://people.apache.org/repo/m2-incubating-repository/&lt;/url&gt;
+    &lt;/repository&gt;
+  &lt;/repositories&gt;
+  &lt;pluginRepositories&gt;
+    &lt;pluginRepository&gt;
+      &lt;id&gt;apache.m2.incubator&lt;/id&gt;
+      &lt;name&gt;Apache M2 Incubator Repository&lt;/name&gt;
+      &lt;url&gt;http://people.apache.org/repo/m2-incubating-repository/&lt;/url&gt;
+    &lt;/pluginRepository&gt;
+  &lt;/pluginRepositories&gt;
+<p>Notice that the <tt>&lt;Export-Package&gt;</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"><div class="preformattedContent">
+<pre>Manifest-Version: 1
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
+Bundle-Activator: org.apache.felix.log.impl.Activator
+Import-Package: org.osgi.framework;version=1.3, org.osgi.service.log;v
+ ersion=1.3
+Include-Resource: src/main/resources
+Export-Package: org.osgi.service.log;uses:=org.osgi.framework;version=
+ 1.3
+Bundle-Version: 0.8.0.SNAPSHOT
+Bundle-Name: Apache Felix Log Service
+Bundle-Description: This bundle provides an implementation of the OSGi
+  R4 Log service.
+Private-Package: org.apache.felix.log.impl
+Bundle-ManifestVersion: 2
+Export-Service: org.osgi.service.log.LogService,org.osgi.service.log.L
+ ogReaderService
+Bundle-SymbolicName: org.apache.felix.log
+<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"><div class="preformattedContent">
+<h2><a name="MavenBundlePlugin(BND)-BuildingthePlugin"></a>Building the
+<p>The plugin is hosted at the Apache Felix incubator 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>
+<div class="preformatted"><div class="preformattedContent">
+<pre>$ svn co http://svn.apache.org/repos/asf/felix/trunk/tools/maven2/maven-bundle-plugin
+<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"><div class="preformattedContent">
+<pre>$ mvn install
+    </div>

Added: felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/apache-felix-small.png
URL: http://svn.apache.org/viewvc/felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/apache-felix-small.png?view=auto&rev=554078
Binary file - no diff available.

Propchange: felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/apache-felix-small.png
    svn:mime-type = application/octet-stream

Added: felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/linkext7.gif
URL: http://svn.apache.org/viewvc/felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/linkext7.gif?view=auto&rev=554078
Binary file - no diff available.

Propchange: felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/linkext7.gif
    svn:mime-type = application/octet-stream

Added: felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/print.html
URL: http://svn.apache.org/viewvc/felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/print.html?view=auto&rev=554078
--- felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/print.html (added)
+++ felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/print.html Fri Jul  6 15:36:17
@@ -0,0 +1,9 @@
+<title>404 Not Found</title>
+<h1>Not Found</h1>
+<p>The requested URL /FELIX/media.data/print.css was not found on this server.</p>
+<address>Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7g Server at cwiki.apache.org
Port 80</address>

Added: felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/site.css
URL: http://svn.apache.org/viewvc/felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/site.css?view=auto&rev=554078
--- felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/site.css (added)
+++ felix/trunk/bundleplugin/doc/maven-bundle-plugin-bnd_files/site.css Fri Jul  6 15:36:17
@@ -0,0 +1,19 @@
+body { background-color: #ffffff; color: #000000; font-family: Arial, sans-serif; }
+h1 { font-size: 130% }
+h2 { font-size: 125% }
+h3 { font-size: 120% }
+h4 { font-size: 115% }
+h5 { font-size: 110% }
+h6 { font-size: 105% }
+a { color: #880000 }
+a:visited { color: #880000 }
+a:hover { color: #cc4444 }
+.title { position: absolute; left: 1em; right: 1em; top: 10px; height: 52px; }
+.menu { position: absolute; top: 80px; left: 0.5em; width: 8em; border: solid 1px black;
padding-left: 0.5em; padding-right: 0.5em }
+.menu ul { list-style: none; padding-left: 0pt}
+.main { position: absolute; top: 65px; left: 10.5em; right: 1em; }
+.code { background-color: #eeeeee; border: solid 1px black; padding: 0.5em; }
+.code-keyword { color: #880000; }
+.code-quote { color: #008800; }
+.code-object { color: #0000dd; }
+.code-java { margin: 0em; }
\ No newline at end of file

View raw message