2008-08-26 22 views
11

Wir haben eine OSGi-Laufzeitumgebung (Equinox) in eine benutzerdefinierte Client-Server-Anwendung eingebettet, um die Entwicklung von Plugins zu erleichtern, und bisher laufen die Dinge gut. Wir verwenden Eclipse zum Erstellen von Plugins aufgrund des integrierten Manifest-Editors, des Abhängigkeitsmanagements und des Export-Assistenten. Die Verwendung von Eclipse für Manager-Builds ist der kontinuierlichen Integration über Hudson nicht förderlich.Wie kann ich OSGi Build-Abhängigkeiten verwalten?

Wir haben OSGi-Bundles, die von anderen OSGi-Bundles abhängen. Ich würde es wirklich hassen, die Reihenfolge in einem benutzerdefinierten ANT-Build zu kodieren. Wir haben getan, das ist die Vergangenheit und es ist ziemlich schrecklich. Gibt es ein Build-Tool, das OSGi-Abhängigkeiten leicht verwalten kann, wenn sie nicht automatisch aufgelöst werden? Gibt es irgendwelche DECENT-Beispiele dafür?

KLARSTELLUNG:

Die generierten Skripte über Eclipse-nur verwendbar sind, bauen. Sie benötigen manuell ablaufende Teile von Eclipse. Wir haben auch einige Standardziele, die der Eclipse-Build nicht haben wird, und ich möchte die generierte Datei nicht ändern, da ich neu generieren kann (ich weiß, dass ich Includes machen kann, aber ich möchte die Eclipse-Gen-Datei vermeiden) zusammen)

Hier mein Projekt-Layout ist:

/ 
-PluginA 
-PluginB 
-PluginC 
. 
. 
. 

den Eclipse-PDE Bei der Verwendung hat jedes Plugin eine Manifest, aber keine build.xml als PDE tut das für mich. Schwer zu automatisieren ein GUI-gesteuerter Prozess mit Hudson. Ich würde gerne meine eigene build.xml einrichten, um jedes zu bauen, aber es gibt Abhängigkeiten und Build-Reihenfolge Probleme. Diese Probleme werden durch die Manifest-Dateien (die OSGi-Importe beschreiben) gesteuert. Zum Beispiel hängt PluginC von PluginB ab, das von PluginA abhängt. Sie müssen in der richtigen Reihenfolge gebaut werden. Ich erkenne, dass ich die Build-Reihenfolge manuell steuern kann, ich suche nach einem Tool, um das Build-Abhängigkeitsmanagement zu automatisieren.

+0

Warum funktionieren deklarative Dienste nicht? – drozzy

Antwort

1

einige alte Fragen Closing out ...

war unser Setup nicht förderlich aufgrund fehlender Netzwerkverbindung und Timing Maven. Ich weiß, dass es offline Maven Setups gibt, aber es war zu viel Zeit gegeben. Hoffentlich werden wir ein richtiges Setup verwenden, wenn wir Zeit haben, den Build-Prozess zu reorganisieren.

Die Lösung beinhaltete Ant, BND und einige benutzerdefinierte Ant-Aufgaben. Die verschiedenen Bündelabhängigkeiten werden manuell verwaltet. Wir haben bereits Ant benutzt; BND und benutzerdefinierte Aufgaben banden alles zusammen. Die benutzerdefinierten Aufgaben sorgten dafür, dass unsere bnd/eclipse-Projekte synchron waren.

2

Wir verwenden Buckminster. Es ist ein Build- und Assembly-Framework, das sich um die Auflösung von Abhängigkeiten, das Holen aus verschiedenen Repositories, das Erstellen und Verpacken des Produkts kümmert.

Es ist ein Tools-Projekt von Eclipse. Es integriert sich gut mit PDE.

Dies bedeutet, dass alle Metadaten, die wir zum Erstellen des RCP verwenden, Buckminster zum Lösen und Erstellen nützlich sind. Beispiel: feature.xml und der Require-Bundle-Header in der Manifest.MF, .product.

Wir konnten keine Build-Skripte in jedem Bündel jetzt bekommen haben; Wir haben jetzt einen einzigen Build pro Produkt. Buckminster passt auf, wenn er das Abhängigkeitsdiagramm durchläuft.

Es hat ein wenig Mühe gekostet, unser bestehendes Cruise-Control/Ant-System damit zu arbeiten, obwohl sie (das Buckminster-Team) begonnen haben, Hudson als Host für das Projekt zu verwenden. Ich glaube, dass ihr Build-Setup auch zum Download verfügbar ist.

Wir sind sehr beeindruckt, obwohl es relativ jung ist.

Wir haben auch in Pax-Construct gesucht, aber wir wollten Maven nicht verwenden.

Wir suchen derzeit auch nach Spring DM testing framework, um den Testaufwand zu erhöhen.

7

Maven2 den ganzen Weg; hat ein Eclipse-Plugin namens zu helfen, es zu verwalten, löst genau das Abhängigkeitsproblem und dann einige. Hat eine free online book as documentation.

Betrachten Sie speziell multi-module projects für die Bündelung vieler Komponenten zusammen und haben Maven die Build-Reihenfolge und Abhängigkeiten zu erarbeiten.

Es gibt auch eine chapter on the Eclipse integration.

Und das ist nur Eclipse und Maven, Sie als nächstes ein paar coole Goodies für OSGi erhalten:

  • Die Apache Felix BND Maven plugin wird automatisch generieren Ihre Manifeste oder zumindest helfen Sie
  • Die PAX OPS4J project und ihre Maven Plugins können eine große Hilfe bei Bootstrapping-Projekten sein, die Trägerraketen usw. bereitstellen.

Und im Grunde genommen passt das Maven-Modulmodell perfekt zum OSGi-Bundle-Modell. Wir haben mit Maven seit mehr als 3 Jahren mehrere Produkte mit hunderten von Bundles entwickelt und verwaltet und es ist großartig.

0

Können Sie bitte erläutern, wo das Problem auftritt? Sie erwähnen OSGi-Bundle-Abhängigkeiten. Ist das zur Laufzeit? Oder während der Kompilierzeit? Im ersten Fall sollten Sie Deklarative Services in Betracht ziehen (siehe OSGi Spec).

0

Wir verwenden Hudson zusammen mit PluginBuilder, um unsere Eclipse-basierten OSGi Bundles/Plugins zu erstellen. Dies basiert auf dem Standard-PDE-Prozess von Eclipse zum Erstellen von Plugins. Dies bedeutet, Eclipse als Compiler zu verwenden.

2

Absenden Maven2. Schauen Sie sich die Tycho-Plugins zum Erstellen an - sie verwenden den JDT-Compiler von Eclipse, so dass sie alle OSGi-Regeln zur Kompilierzeit implementieren, genauso wie es Eclipse zur Laufzeit tut.

Alternativ scheinen auch die Apache Felix BND Plugins populär zu sein. Ich bevorzuge Tycho, weil es die Entwicklungsumgebungen von Maven und Eclipse enger zu vereinigen scheint.

1

PDE Headless bauen. Es ist gut dokumentiert von Eclipse. Wenn Sie Eclipse-Plugins erstellen und dies über die Befehlszeile ausführen möchten, ist der Eclipse PDE Headless-Build der richtige Weg.

0

Ich verwende Maven 3.0.2

mvn erzeugen: Urbild

select 252 - osgi-archetype 
mvn idea:idea 

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html siehe

auf Ihre Abhängigkeiten in das Bündel Verwendung dieses kurze Beispiel in der pom hinzufügen.xml

<Export-Package>org.foo.myproject.api</Export-Package> 

oder

<Import-Package>org.foo.myproject.api</Import-Package> 
0

Maven nicht Internet-Konnektivität erforderlich! Benutze den Schalter -o, um Himmels willen.