Verwenden von JavaFX 2.2 im OSGi-Bundle

7

Wie kann ich JavaFX 2.2 in einem OSGi-Paket verwenden? Ich benutze Apache Felix, also ist es kein eclispe Projekt. Es muss auf Mac OSX mit Java7 installiert werden (Java6 wäre cool, aber nicht notwendig).

Ich habe etwas über das Repacking der jfx-Bibliotheken gelesen, aber für eclispe-Plugin-Projekte.

Beim Importieren der javafx-Pakete in das Paket Manifest wurde eine fehlende Anforderung osgi.wiring.package Exception erstellt.

    
chrise 05.11.2012, 21:38
quelle

3 Antworten

7

Versuchen Sie es mit den e (fx) clipse-Laufzeittools, die Bibliotheken enthalten, damit JavaFX in einer OSGi-Umgebung gut funktioniert.

Laut der e (fx) Clipfunktion :

  

Leider ist JavaFX nicht mit OSGi geschrieben, daher gibt es verschiedene Stellen, die Probleme beim Ausführen innerhalb von OSGi verursachen, angefangen von der Tatsache, dass sich JavaFX-Binärdateien irgendwo auf dem Benutzersystem befinden, bis hin zu Problemen beim Laden von Klassen Die Sichtbarkeitsregeln von OSGi. e (fx) clipse stellt Hilfs-Bibliotheken zur Verfügung, um all diese Probleme zu lösen und macht das Schreiben von JavaFX-Anwendungen auf Eclipse Equinox so einfach wie mit SWT und Swing

    
jewelsea 05.11.2012, 23:28
quelle
11

Es ist vielleicht etwas spät, um Ihnen zu helfen, aber ich würde gerne einen einfachen Weg dokumentieren, um JavaFX in einer OSGi-Umgebung zu aktivieren, für den Fall, dass jemand wie ich immer noch Schwierigkeiten damit hatte ....

Die Sache ist, dass Sie JavaFX die Möglichkeit geben müssen, jede gewünschte Klasse zu laden und zu verwenden (JavaFX nutzt Interna der JRE, was es wirklich schwer macht, zu bündeln), also wollen Sie ihm wirklich Zugriff geben zum OSGi-Klasse-Erweiterungspfad ...

Ich bin kein Experte, aber in diesem Blog erklärt Costin Leau von SpringSource, wie man es macht (für alle Jars, die vollen Zugriff auf den System-Classloader, nicht nur JavaFX, haben) auf drei verschiedene Arten:

Ссылка

Ich habe die Option A gewählt, was im Grunde bedeutet, die OSGi-spezifizierte Eigenschaft (nicht spezifisch für irgendeine Implementierung!) in der Konfigurationsdatei Ihres OSGi-Containers festzulegen:

  

org.osgi.framework.system.packages.extra = javafx.application; version = 0.0.0 ...

Sie können den gesamten Wert der Eigenschaft in diesem Gist sehen, den ich erstellt habe:

Ссылка

Ich habe es im Grunde genommen mit allen Paketen, die das JavaFX 2.2 jar exportieren kann (und ich fand das heraus, indem ich das JavaFX jar einfach in den deploy-Ordner meines Apache Karaf lösche, der es automatisch zu einem Bundle macht und dann Ich habe versucht, das von Karaf erzeugte Paket zu verwenden (das pax-wrap dazu verwendet), aber das wird nicht funktionieren, weil JavaFX versucht, Ihre Klassen zu laden (was sind in dem versuchten JavaFX-Paket nicht sichtbar, ganz zu schweigen von allen JRE-Paketen, auf die JavaFX zuzugreifen versucht).

Ich vermute, dass nicht alle Pakete, die ich hinzugefügt habe, tatsächlich benötigt werden, aber um sicher zu sein, habe ich sie alle wie von Karafs Wrapper erzeugt und wie es funktioniert, werde ich das nicht ändern, außer es gibt einen guten Grund dafür.

Nun kann jedes meiner Bundles JavaFX verwenden, solange die jfxrt.jar im JRE-lib-Ordner vorhanden ist.

    
Renato 17.02.2013 21:39
quelle
6

Kein Paket mit JavaFX, aber das Hinzufügen der javafx-Klassen zum Boot-Classloader funktioniert. Beispiel mit Apache Felix:

%Vor%

Benutze nun einfach die javafx-Klassen aus einem beliebigen Bundle (wenn JavaFX auf dem Client-Computer installiert ist).

    
chrise 13.11.2012 14:58
quelle

Tags und Links