Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This

...

Maven

...

plug-in

...

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.

...

This

...

plug-in

...

lets

...

you

...

add

...

your

...

bundles

...

to

...

the

...

local

...

OBR

...

at

...

the

...

same

...

time

...

you

...

install

...

them

...

into

...

your

...

local

...

Maven

...

repository.

...

It

...

can

...

also

...

register

...

your

...

bundles

...

with

...

a

...

remote

...

OBR

...

when

...

you

...

deploy

...

them

...

to

...

a

...

remote

...

Maven

...

repository.

...

The

...

plug-in

...

computes

...

capabilities

...

and

...

requirements

...

and

...

edits

...

the

...

repository

...

description

...

file

...

to

...

add

...

(or

...

update)

...

the

...

bundle

...

description.

...

Features:

...

The

...

plug-in

...

supports:

...

  • Installing

...

  • Maven

...

  • artifacts

...

  • inside

...

  • an

...

  • OBR,

...

  • automatically

...

  • or

...

  • manually

...

  • (for

...

  • legacy

...

  • bundles).

...

  • This

...

  • OBR

...

  • could

...

  • be

...

  • remote

...

  • or

...

  • local.

...

  • Discovering

...

  • bundle

...

  • capabilities

...

  • and

...

  • requirements

...

  • Customizing

...

  • bundle

...

  • descriptions

...

How

...

to

...

use

...

the

...

plug-in?

...

The

...

plug-in

...

offers

...

five

...

Maven

...

goals:

...

  • The

...

  • standard

...

  • 'install'

...

  • goal

...

  • which

...

  • installs

...

  • your

...

  • bundle

...

  • in

...

  • the

...

  • local

...

  • OBR

...

  • at

...

  • the

...

  • same

...

  • time

...

  • you

...

  • install

...

  • it

...

  • in

...

  • your

...

  • local

...

  • Maven

...

  • repository.

...

  • An

...

  • 'install-file'

...

  • goal

...

  • which

...

  • takes

...

  • an

...

  • existing

...

  • Maven

...

  • artifact,

...

  • and

...

  • installs

...

  • it

...

  • into

...

  • the

...

  • local

...

  • OBR.

...

  • A

...

  • 'deploy'

...

  • goal

...

  • which

...

  • installs

...

  • your

...

  • bundle

...

  • in

...

  • a

...

  • remote

...

  • OBR

...

  • at

...

  • the

...

  • same

...

  • time

...

  • you

...

  • deploy

...

  • it

...

  • to

...

  • a

...

  • remote

...

  • Maven

...

  • repository.

...

  • A

...

  • 'deploy-file'

...

  • goal

...

  • which

...

  • takes

...

  • an

...

  • existing

...

  • Maven

...

  • artifact,

...

  • and

...

  • installs

...

  • it

...

  • into

...

  • a

...

  • remote

...

  • OBR.

...

  • A

...

  • 'clean'

...

  • goal

...

  • which

...

  • cleans

...

  • the

...

  • local

...

  • OBR.

...

Installing

...

bundles

...

in

...

a

...

local

...

OBR

...

The

...

plug-in

...

can

...

create

...

a

...

local

...

OBR

...

at

...

the

...

root

...

of

...

the

...

local

...

Maven

...

repository.

...

Each

...

time

...

the

...

artifact

...

is

...

installed

...

in

...

the

...

local

...

Maven

...

repository

...

(by

...

using

...

the

...

'mvn

...

install'

...

command),

...

the

...

local

...

OBR

...

repository

...

is

...

updated

...

to

...

contain

...

the

...

description

...

of

...

the

...

artifact.

...

This

...

feature

...

is

...

automated

...

inside

...

the

...

maven-bundle-plugin

...

.

Installing an existing Maven artifact in a local OBR

This second way, to use the plug-in is to add an already existing bundle to the OBR. The bundle must be already in the Maven local repository (you can use the Maven install:install-file

...

plug-in

...

to

...

install

...

an

...

external

...

bundle

...

in

...

your

...

Maven

...

repository).

...

To

...

use

...

this

...

goal,

...

the

...

user

...

must

...

provide

...

information

...

in

...

command

...

line:

...

Variable

...

name

...

(prefixed

...

by

...

--D)

...

status

description

artifactId

required

artifactId of the bundle Used to determine path to the jar file in local maven Repository use as symbolic name if it isn't define in manifest

groupId

required

groupId of the bundle Used to determine path to the file in the local maven repository

version

required

Version of the bundle Used to determine path to the file in the local maven repository

packaging

required

File type Used to determine path to the file in the local maven repository

repository-path

optional

Path to the repository descriptor file (if not defined: default path is <localRepository>/repository.xml

obr-file

optional

Path to the obr.xml, file which describes capabilities, requirements and categories given manually by user. (if not defined: nothing is added to the resource description).

Example of command line:

mvn org.apache.felix:maven-obr-plugin:install-file

...

\

...


-Drepository-path=

...

file:///c:\repository.xml

...

\

...


-obr-file=

...

file:///c:\project\homega\obr.xml

...

\

...


-DgroupId=homega.utils

...

\

...


-DartifactId=multicast.discovery

...

\

...


-Dversion=1.0.0

...

\

...


-Dpackaging=jar

...

By

...

using

...

this

...

command,

...

the

...

plug-in

...

will

...

look

...

at

...

the

...

artifact <localRepository>/homega/utils/multicast.discovery/1.0.0/multicast.discovery-1.0.0.jar

...


Then

...

it

...

will

...

compute

...

bundle

...

description

...

by

...

using

...

bindex

...

and

...

information

...

from

...

the

...

command

...

line

...

(groupId,

...

artifactId,

...

version,

...

and

...

obr

...

file

...

(if

...

set)).

...

Note:

...

The

...

OBR

...

plug-in

...

does

...

not

...

install

...

the

...

file

...

in

...

the

...

Maven

...

repository

...

but

...

uses

...

an

...

already

...

installed

...

artifact.

...

However,

...

it

...

is

...

possible

...

to

...

install

...

the

...

bundle

...

in

...

the

...

repository

...

and

...

to

...

add

...

it

...

to

...

the

...

local

...

OBR

...

in

...

one

...

command:

...

mvn

...

install:install-file

...

org.apache.felix:maven-obr-plugin:install-file

...

\

...


-Dfile=

...

file:///c:\projet\homega\multicast.discovery-1.0.0.jar

...

\

...


-Drepository-path=

...

file:///c:\repository.xml

...

\

...


-obr-file=

...

file:///c:\project\homega\obr.xml

...

\

...


-DgroupId=homega.utils

...

\

...


-DartifactId=multicast.discovery

...

\

...


-Dversion=1.0.0

...

\

...


-Dpackaging=jar

...

Deploying

...

a

...

bundle

...

to

...

a

...

remote

...

OBR

...

To

...

use

...

the

...

deploy

...

goal,

...

you

...

must

...

change

...

your

...

pom.xml

...

  • Add

...

  • the

...

  • "deploy"

...

  • goal
    • Indicate the repository-name

...

    • property.

...

    • This

...

    • is

...

    • the

...

    • name

...

    • of

...

    • the

...

    • repository

...

    • descriptor

...

    • file

...

    • (this

...

    • property

...

    • is

...

    • optional;

...

    • default

...

    • value

...

    • is

...

    • "repository.xml").

...

    • This

...

    • file

...

    • is

...

    • located

...

    • on

...

    • url

...

    • provided

...

    • by

...

    • user.

...


    • <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-obr-plugin</artifactId>
              <configuration>
                  <repository-name>repository.xml</repository-name>
              </configuration>
              <executions>
                <execution>
                  <goals>
                    <goal>deployment</goal>
                  </goals>
                </execution>
              </executions>
      </plugin>
    • You must also configure where the plugin will upload bundles and repository descriptor file. You could do it in maven as this:
        <distributionManagement>
          <repository>
           <id>ftp-repository</id>
           <name>RepoName</name>
           <url>ftp://ftp.youraddress.com/obr</url>
          </repository>
        </distributionManagement>
    • Now maven will upload your bundle on this ftp site.
  • Launch the 'mvn deploy' command

Not all protocols are supported by maven out of the box. For example the ftp protocol described above requires the wagon plugin to run correctly. To use wagon for the ftp protocol add this to your Pom:

<build>
     <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
         <artifactId>wagon-ftp</artifactId>
         <version>1.0-alpha-6</version>
      </extension>
    </extensions>

The deploy goal supports all protocols supported by wagon.

Deploy non-maven bundle on a remote OBR

This goal is useful if you want add a non-maven artifact to your remote repository, for example a legacy bundle.

To use this goal, the user must provide information in command line:

Variable name (preceded by --D)

status

description

artifactId

required

artifactId of the bundle Used to determine path to the file in the local maven repository

groupId

required

groupId of the bundle Used to determine path to the file in the local maven repository

version

required

Version of the bundle Used to determine path to the file in the local maven repository

packaging

required

File type Used to determine path to the file in the local maven repository

repository-name

optional

Name of the OBR file. (if not defined: defaults to repository.xml).

obr-file

optional

Path to the obr.xml, file which describe capabilities requirement and category given manually by user. (if not defined: nothing is added to the resource description).

Example of complete command line, which also uses the maven-deploy-plugin to deploy the legacy bundle to the server:

mvn deploy:deploy-file org.apache.felix:maven-obr-plugin:deploy-file \
-Dfile=echo2.jar \
-DrepositoryId=ftp-repository \
-Durl=ftp://ftp.plop-plop.net/obr \
-DuniqueVersion=false \
-DgroupId=tools \
-DartifactId=echo2 \
-Dversion=2.0.0 \
-Dpackaging=jar \
-Dobr-file=c:\obr.xml

To upload your file, you must create a small pom file declaring a repositoryManagement to indicates which remote server you use and the component to use for the protocol transfer. This file must contain also groupId, artifactId version and packaging information (in fact those data are redundant with the command line, so you could omit them in command line).

Example of additional pom.xml:

<project>
  <modelVersion>4.0.0</modelVersion>
  <packaging>jar</packaging>
  <groupId>tools</groupId>
  <artifactId>echo2</artifactId>
  <version>2.0.0</version>
  <distributionManagement>
   <repository>
    <id>ftp-repository</id>
    <name>RepoName</name>
    <url>ftp://ftp.plop-plop.net/obr</url>
   </repository>
  </distributionManagement>
  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
         <artifactId>wagon-ftp</artifactId>
         <version>1.0-alpha-6</version>
      </extension>
    </extensions>
  </build>
</project>

Concurrent updates

With a remote OBR, several uploads may occur at the same time. However, the remote OBR is centralized in one file, so concurrent modification needs to 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 addd -Dignore-lock to the command-line or the configuration section of your Pom.

Cleaning the local OBR

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 from the Maven repository. The plug-in provides a simple goal to look for missing bundles and to remove them from the local OBR.

To use this feature, run the following command from a folder in your project 'mvn org.apache.felix:maven-obr-plugin:clean'

...

.

...

How

...

the

...

plug-in

...

computes

...

the

...

description

...

of

...

the

...

bundle

...

The

...

description

...

of

...

the

...

bundle

...

comes

...

from

...

three

...

different

...

sources:

...

  • Bindex

...

  • :

...

  • Bindex

...

  • is

...

  • a

...

  • tool

...

  • that

...

  • analyzes

...

  • a

...

  • bundle

...

  • manifest

...

  • to

...

  • generate

...

  • OBR

...

  • description

...

  • The

...

  • pom.xml

...

  • file

...

  • :

...

  • by

...

  • analyzing

...

  • the

...

  • pom

...

  • file,

...

  • various

...

  • information

...

  • is

...

  • collected

...

  • (symbolic

...

  • name

...

  • ...)

...

  • The

...

  • obr.xml

...

  • file

...

  • :

...

  • this

...

  • file

...

  • contains

...

  • customized

...

  • description

...

  • and

...

  • capabilities

...

  • for

...

  • the

...

  • bundle

...

In

...

order

...

to

...

create

...

the

...

bundle

...

description,

...

the

...

plug-in

...

gets

...

information

...

from

...

bindex,

...

the

...

pom.xml

...

and

...

the

...

obr.xml

...

file.

...

Information

...

can

...

be

...

overridden:

...


Bindex

...


|

...

(overrides)

...


pom.xml

...


|

...

(overrides)

...


obr.xml

...

A

...

warning

...

message

...

is

...

displayed

...

each

...

time

...

already

...

existing

...

information

...

is

...

overridden.

...

In

...

case

...

of

...

install-file

...

goal,

...

the

...

information

...

given

...

by

...

user

...

(i.e.:

...

groupId,

...

artifactId,

...

version)

...

is

...

considered

...

as

...

pom.xml

...

properties.

...

Known

...

issues

...

&

...

limitations:

...

1.Does

...

not

...

support

...

relative

...

paths

...

when

...

you

...

specify

...

the

...

repository

...

descriptor

...

in

...

command

...

line

...

use.

...


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

...