DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
Bundle
...
Plugin
...
for
...
Maven
...
This
...
plugin
...
for
...
Maven
...
2
...
is
...
based
...
on
...
the
...
...
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.
...
| Anchor | ||||
|---|---|---|---|---|
|
...
Simple
...
Example
...
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
...
"
...
...
...
"
...
will
...
follow.
...
Assume
...
that
...
we
...
have
...
a
...
simple
...
bundle
...
project
...
that
...
has
...
a
...
pubic
...
API
...
package
...
an
...
several
...
implementation
...
packages,
...
such
...
as:
| No Format |
|---|
} org.foo.myproject.api org.foo.myproject.impl1 org.foo.myproject.impl2 ... {noformat} |
If
...
we
...
also
...
assume
...
that
...
we
...
have
...
a
...
bundle
...
activator
...
in
...
one
...
of
...
the
...
implementation
...
packages,
...
then
...
<plugins>
...
section
...
of
...
the
...
POM
...
file
...
would
...
look
...
like
...
this:
| No Format |
|---|
} ... <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package>org.foo.myproject.api</Export-Package> <Private-Package>org.foo.myproject.*</Private-Package> <Bundle-Activator>org.foo.myproject.impl1.Activator</Bundle-Activator> </instructions> </configuration> </plugin> <plugins> ... {noformat} The {{ |
The <Export-Package>
...
and
...
<Private-Package>
...
instructions
...
tell
...
the
...
plugin
...
about
...
the
...
contents
...
of
...
the
...
bundle
...
JAR
...
file.
...
The
...
<Export-Package>
...
instruction
...
tells
...
the
...
plugin
...
which
...
of
...
the
...
available
...
packages
...
to
...
include
...
into
...
the
...
bundle
...
and
...
to
...
export,
...
while
...
the
...
<Private-Package>
...
instruction
...
indicates
...
which
...
of
...
the
...
available
...
packages
...
to
...
include
...
into
...
the
...
bundle
...
but
...
not
...
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
...
...
.
...
One
...
specific
...
behavior
...
to
...
highlight
...
is
...
that
...
the
...
plugin
...
generates
...
the
...
Import-Package
...
bundle
...
manifest
...
header
...
based
...
on
...
the
...
specified
...
contents
...
of
...
the
...
bundle,
...
which
...
means
...
that
...
you
...
generally
...
do
...
not
...
ever
...
need
...
to
...
specify
...
it.
...
That's
...
it.
...
Features
The BND library underlying the plugin defines instructions to direct its functionality. For this Maven plugin, these instructions are issues in the plugin configuration section of the POM file, as was illustrated [above|#simple-example}.
...
BND
...
recognizes
...
three
...
types
...
of
...
instructions:
...
- Manifest
...
- headers
...
- -
...
- Any
...
- instruction
...
- that
...
- starts
...
- with
...
- a
...
- capital
...
- letter
...
- will
...
- appear
...
- in
...
- the
...
- resulting
...
- bundle's
...
- manifest
...
- file;
...
- the
...
- value
...
- will
...
- either
...
- be
...
- copied,
...
- augmented,
...
- or
...
- generated
...
- by
...
- BND
...
- depending
...
- on
...
- the
...
- instruction.
...
- Variables - Any instruction starting with a lowercase letter is assumed to be a variable in the form of a name-value pair, such as
version=3.0
...
- ,
...
- that
...
- can
...
- be
...
- used
...
- with
...
- property
...
- substitution,
...
- but
...
- are
...
- not
...
- copied
...
- to
...
- the
...
- manifest.
...
- Directives - Any instruction starting with a '-'
...
- character
...
- is
...
- considered
...
- to
...
- be
...
- a
...
- directive
...
- that
...
- informs
...
- BND
...
- to
...
- perform
...
- some
...
- special
...
- processing
...
- and
...
- are
...
- not
...
- copied
...
- to
...
- the
...
- manifest.
...
The
...
remainder
...
of
...
this
...
section
...
covers
...
the
...
most
...
important
...
aspects
...
of
...
BND's
...
instructions;
...
for
...
complete
...
details
...
refer
...
to
...
the
...
...
...
.
| Anchor | ||||
|---|---|---|---|---|
|
Default Behavior
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:
- Bundle symbolic name is set to
${groupId}.${artifactId
...
- }
...
- .
...
properties.put(Analyzer.BUNDLE_SYMBOLICNAME,
...
bsn);
...
properties.put(Analyzer.IMPORT_PACKAGE,
...
"*");
...
properties.put(Analyzer.EXPORT_PACKAGE,
...
bsn
...
+
...
".*");
...
String
...
version
...
=
...
project.getVersion().replace('-',
...
'.');
...
properties.put(Analyzer.BUNDLE_VERSION,
...
version);
...
header(properties,
...
Analyzer.BUNDLE_DESCRIPTION,
...
project
.getDescription());
...
header(properties,
...
Analyzer.BUNDLE_LICENSE,
...
printLicenses(project.getLicenses()));
...
header(properties,
...
Analyzer.BUNDLE_NAME,
...
project.getName());
...
header(properties,
...
Analyzer.BUNDLE_VENDOR,
...
project
.getOrganization());
...
header(properties,
...
Analyzer.INCLUDE_RESOURCE,
...
"src/main/resources");
...
Instructions
| Anchor | ||||
|---|---|---|---|---|
|
...
Detailed
...
"How
...
To"
...