Frage

Wir haben eine OSGi-Laufzeitumgebung (Equinox) in unsere benutzerdefinierte Client-Server-Anwendung eingebettet, um die Plugin-Entwicklung zu erleichtern, und bisher läuft alles großartig.Aufgrund des integrierten Manifesteditors, der Abhängigkeitsverwaltung und des Exportassistenten haben wir Eclipse zum Erstellen von Plugins verwendet.Die Verwendung von Eclipse zum Verwalten von Builds ist für die kontinuierliche Integration über Hudson nicht sehr förderlich.

Wir haben OSGi-Bundles, die von anderen OSGi-Bundles abhängen.Ich würde es wirklich hassen, die Build-Reihenfolge in einem benutzerdefinierten ANT-Build fest zu codieren.Wir haben das getan, das gehört der Vergangenheit an und es ist ziemlich schrecklich.Gibt es ein Build-Tool, das OSGi-Abhängigkeiten EINFACH verwalten, wenn nicht sogar automatisch auflösen kann?Gibt es ANGEMESSENE Beispiele dafür?

KLÄRUNG:

Die generierten Build-Skripte sind nur über Eclipse nutzbar.Sie erfordern die manuelle Ausführung von Eclipse-Teilen.Wir haben auch einige Standardziele, die der Eclipse-Build nicht haben wird, und ich möchte die generierte Datei nicht ändern, da ich sie möglicherweise neu generieren muss (ich weiß, dass ich Einbindungen durchführen kann, aber ich möchte die Eclipse-Gendatei vollständig vermeiden zusammen)

Hier ist mein Projektlayout:

/
-PluginA
-PluginB
-PluginC
.
.
.

Bei der Verwendung der Eclipse-PDE hat jedes Plugin ein Manifest, aber keine build.xml, da die PDE das für mich erledigt.Es ist schwierig, einen GUI-gesteuerten Prozess mit Hudson zu automatisieren.Ich würde gerne meine eigene build.xml einrichten, um jedes zu erstellen, ABER es gibt Abhängigkeiten und Probleme mit der Build-Reihenfolge.Diese Probleme werden durch die Manifestdateien verursacht (die OSGi-Importe beschreiben).Beispielsweise hängt PluginC von PluginB ab, das wiederum von PluginA abhängt.Sie müssen in der richtigen Reihenfolge gebaut werden.Mir ist klar, dass ich die Build-Reihenfolge manuell steuern kann. Ich suche nach einem Tool, das dabei hilft, die Abhängigkeitsverwaltung der Build-Reihenfolge zu automatisieren.

War es hilfreich?

Lösung 4

Zum Abschluss noch ein paar alte Fragen...

Unser Setup war für Maven aufgrund fehlender Netzwerkkonnektivität und fehlendem Timing nicht förderlich.Ich weiß, dass es Offline-Maven-Setups gibt, aber angesichts der Zeit war das alles zu viel.Hoffentlich können wir ein ordnungsgemäßes Setup verwenden, wenn wir Zeit haben, den Build-Prozess neu zu organisieren.

Die Lösung umfasste Ant, BND und einige benutzerdefinierte Ant-Aufgaben.Die verschiedenen Bundle-Abhängigkeiten werden manuell verwaltet.Wir haben Ant bereits verwendet;Der BND und benutzerdefinierte Aufgaben haben alles zusammengehalten.Die benutzerdefinierten Aufgaben stellten lediglich sicher, dass unsere BND/Eclipse-Projekte synchron waren.

Andere Tipps

Maven2 den ganzen Weg;hat ein Eclipse-Plugin namens m2eclipse Um bei der Verwaltung zu helfen, löst es genau das Abhängigkeitsproblem und noch einiges mehr.Hat ein kostenloses Online-Buch als Dokumentation.

Konkret anschauen Mehrmodulige Projekte um viele Komponenten zu bündeln und Maven die Build-Reihenfolge und Abhängigkeiten ausarbeiten zu lassen.

Da ist auch ein Kapitel über die Eclipse-Integration.

Und das sind nur Eclipse und Maven, als nächstes gibt es ein paar coole Extras für OSGi:

  • Der Apache Felix BND Maven-Plugin wird Ihre Manifeste automatisch generieren oder Ihnen zumindest helfen
  • Der PAX OPS4J-Projekt und ihre Maven-Plugins können eine große Hilfe beim Bootstrapping von Projekten, der Bereitstellung von Launchern usw. sein

Und grundsätzlich passt das Maven-Modulmodell perfekt zum Bundle-Modell von OSGi.Wir erstellen und verwalten seit mehr als drei Jahren mehrere Produkte mit Hunderten von Bundles mit Maven und es ist großartig.

Unterstützung von Maven2.Schauen Sie sich die Tycho-Plugins zum Erstellen an – sie verwenden den JDT-Compiler von Eclipse, sodass alle OSGi-Regeln zur Kompilierungszeit implementiert werden, genau wie Eclipse zur Laufzeit.

Alternativ scheinen auch die Apache Felix BND-Plugins beliebt zu sein.Ich bevorzuge Tycho, weil es die Entwicklungsumgebungen Maven und Eclipse stärker zu vereinheitlichen scheint.

Wir gebrauchen Buckminster.Es handelt sich um ein Build- und Assembly-Framework, das sich um die Auflösung von Abhängigkeiten, das Abrufen aus verschiedenen Repositorys sowie das Erstellen und Verpacken des Produkts kümmert.

Es ist ein Eclipse Tools-Projekt.Es lässt sich gut in PDE integrieren.

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

Wir haben derzeit nicht in jedem Bundle Build-Skripte;Wir haben jetzt einen einzigen Build pro Produkt.Buckminster kümmert sich darum, das Abhängigkeitsdiagramm zu durchlaufen.

Es hat ein wenig Mühe gekostet, unser bestehendes Tempomat-/Ameisensystem damit zum Laufen zu bringen, obwohl sie (das Buckminster-Team) begonnen haben, Hudson als Host für das Projekt selbst zu nutzen.Ich glaube, dass ihr Build-Setup auch zum Download verfügbar ist.

Wir sind davon wirklich beeindruckt, obwohl es noch relativ jung ist.

Wir haben auch nachgeschaut Pax-Konstrukt aber wir wollten Maven nicht verwenden.

Wir schauen uns auch gerade um Spring DM-Testframework um den Aufwand für Unit-Tests zu erhöhen.

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

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

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

Maven benötigt keine Internetverbindung!Benutzen Sie den Schalter -o, um Himmels willen.

Ich verwende Maven 3.0.2

mvn generieren:Archetyp

select 252 - osgi-archetype
mvn idea:idea

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

Um Ihre Abhängigkeiten zum Bundle hinzuzufügen, verwenden Sie dieses kurze Beispiel in pom.xml

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

oder

<Import-Package>org.foo.myproject.api</Import-Package>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top