OSGi Best Practices / Bestehendes Programm migrieren

hueck

Mitglied
Hallo,

Ich bin auf der Suche nach informationen um eine bestehende Maven3 Anwendung in ein OSGi (Konkret muss es erstmal nur unter Equinox laufen) Bundle umzuwandeln.

Konnte auf die schnelle nichts finden. Bin für jede hilfe dankbar.
 
G

Gast2

Gast
Hallo,

Ich bin auf der Suche nach informationen um eine bestehende Maven3 Anwendung in ein OSGi (Konkret muss es erstmal nur unter Equinox laufen) Bundle umzuwandeln.

Konnte auf die schnelle nichts finden. Bin für jede hilfe dankbar.

Dafür gibt es kein Maven Plugin, dass musst du schon von Hand migirieren. Und danach kannst du deine Anwendung mit Maven Tycho bauen und releasen usw.
 
G

Gast2

Gast
Ja wie soll sowas auch funktionieren?
Woher soll das Maven Plugin wissen welche Package du importieren und exportieren willst in welchen Versionen usw.
 

hueck

Mitglied
Kann mir jemand sagen wo der fehler liegt? Ausgangspunkt ist folgende pom.xml

[XML]<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>cross</artifactId>
<groupId>foo.bar</groupId>
<version>1.2.12-SNAPSHOT</version>
</parent>
<artifactId>cross-main-api</artifactId>
<name>cross-main-api</name>
<dependencies>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.6</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>cross-event</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>cross-exception</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>edu.ucar.unidata</groupId>
<artifactId>netcdf</artifactId>
<version>4.2</version>
</dependency>
</dependencies>
</project>
[/XML]

Bin dann auf das apache-felix-maven-bundle plugin gestossen und habe die xml um

[XML]<packaging>bundle</packaging>[/XML] und

[XML]<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
</instructions>
</configuration>
</plugin>
</plugins>
</build>[/XML]

erweitert. Nach einem mvn clean install habe ich eine jar mit folgendem manifest

Code:
Bundle-Name: cross-main-api
Bundle-SymbolicName: cross-main-api
Bundle-Version: 1.2.12.SNAPSHOT
Created-By: Apache Maven Bundle Plugin
Export-Package: cross;uses:="org.apache.commons.configuration";version="
 1.2.12.SNAPSHOT",cross.commands;uses:=cross;version="1.2.12.SNAPSHOT",c
 ross.commands.fragments;uses:="cross.vocabulary,cross.datastructures.wo
 rkflow,cross.event,cross.commands";version="1.2.12.SNAPSHOT",cross.data
 structures;uses:="cross.datastructures.fragments";version="1.2.12.SNAPS
 HOT",cross.datastructures.cache;version="1.2.12.SNAPSHOT",cross.datastr
 uctures.collections;version="1.2.12.SNAPSHOT",cross.datastructures.frag
 ments;uses:="ucar.nc2,cross.exception,org.jdom,ucar.ma2,cross.datastruc
 tures.cache,cross,cross.io.xml,cross.datastructures,cross.io.misc";vers
 ion="1.2.12.SNAPSHOT",cross.datastructures.pipeline;uses:="cross.datast
 ructures.tuple,cross.datastructures.fragments,cross.io.xml,cross.datast
 ructures.workflow,cross.event,cross.commands.fragments,cross.exception"
 ;version="1.2.12.SNAPSHOT",cross.datastructures.threads;version="1.2.12
 .SNAPSHOT",cross.datastructures.tuple;version="1.2.12.SNAPSHOT",cross.d
 atastructures.workflow;uses:="cross.datastructures.fragments,cross.data
 structures.pipeline,cross.event,org.jdom,org.apache.commons.configurati
 on,cross,cross.io.xml";version="1.2.12.SNAPSHOT",cross.io;uses:="cross.
 exception,cross.datastructures.fragments,org.apache.commons.configurati
 on.event,ucar.ma2,cross,cross.datastructures.tuple";version="1.2.12.SNA
 PSHOT",cross.io.misc;version="1.2.12.SNAPSHOT",cross.io.xml;uses:="org.
 jdom";version="1.2.12.SNAPSHOT",cross.vocabulary;uses:="cross.exception
 ";version="1.2.12.SNAPSHOT"
Import-Package: cross.event,cross.exception,org.apache.commons.configura
 tion;version="[1.6,2)",org.apache.commons.configuration.event;version="
 [1.6,2)",org.jdom,ucar.ma2,ucar.nc2
Tool: Bnd-1.50.0

Was nach meinem verständins erst mal gut ausschaut...

Also starte ich equinox, installiere das Bundle und beim starten bekomme ich folgenden fehler:

BundleException: The bundle "cross-main-api_1.2.12.SNAPSHOT [36]" could not be resolved. Reason: Missing Constraint: Import-Package: cross.event; version="0.0.0"

Wo ist mein fehler? Das Bundle ist ja im Manifest angegeben...

VIelen Dank im vorraus und ein schönes wochenende
 

hexx

Mitglied
Sieht so aus, als wenn kein Bundle in deiner OSGi Runtime das Paket
Code:
cross.event
exportiert. Das hast du aber als Constraint
Code:
Import-Package: cross.event,...
angegeben.
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben