2016-04-02 11 views
0

Meine Projekt Verzeichnisstruktur (in Eclipse):Wie kann ich mich über eine mit ** CSS ** Ressource-Datei in einem OSGi-Bundle aus einem anderen OSGi-Bundle

MyProjectContainingCSS/ 
    src/  --> "source directory" on Eclipse's classpath/buildpath 
     com.me.myapp 
      style.css 


MyProjectInheritingCSS/ 
    src/  --> "source directory" on Eclipse's classpath/buildpath 
     com.me.myapp 
      StyleImpl.java 

Ich möchte in der CSS-Datei verwenden, style.css in dem OSGi-Bundle enthaltenen MyProjectContainingCSS im anderen OSGi-Bundle MyProjectContainingCSS in der Klasse StyleImpl.java,

Etwas wie:

public class StyleImpl { 
    public static void main(String[] args) { 
     css = this.getClass().getResource("/com/me/myapp/style.css").toExternalForm(); 
     scene.getStylesheets().add(css); 
    } 
} 

Wie kann ich eine CSS Ressourcendatei in einem OSGi-Bundle aus einem anderen OSGi-Bundle verwenden?

Vielen Dank im Voraus.

UPDATE

Die bnd.bnd Datei

Bundle-Version: 0.0.0.${tstamp} 
-buildpath: \ 
    ../cnf/plugins/org.apache.felix.dependencymanager.annotation-3.2.0.jar;version=file,\ 
    org.apache.felix.dependencymanager,\ 
    osgi.core,\ 
    launcher;version=latest,\ 
    libs/commons-io-2.4.jar;version=file 
Private-Package: ui.impl 
Export-Package: ui 
Import-Package: * 

Run Descriptor

-runfw: org.apache.felix.framework;version='[4,5)' 
-runee: JavaSE-1.8 
-runsystemcapabilities: ${native_capability} 

-resolve.effective: active;skip:="osgi.service" 
-runbundles: \ 
    org.apache.felix.dependencymanager,\ 
    org.apache.felix.dependencymanager.runtime,\ 
    org.apache.felix.dependencymanager.shell,\ 
    org.apache.felix.metatype,\ 
    org.apache.felix.eventadmin,\ 
    org.apache.felix.configadmin,\ 
    org.apache.felix.log,\ 
    org.apache.felix.gogo.command,\ 
    org.apache.felix.gogo.runtime,\ 
    org.apache.felix.gogo.shell,\ 
    launcher;version=latest,\ 
    ui;version=latest,\ 
    mainscreen;version=latest 
-runsystempackages: javafx.application,javafx.scene,javafx.stage,javafx.scene.layout,javafx.event,javafx.collections,javafx.scene.control,javafx.scene.paint,javafx.scene.shape 
+0

Erstellen Sie eine Klasse im CSS-Bundle, um den InputStream für die CSS-Datei verfügbar zu machen und diese Klasse in ein anderes Bundle zu importieren. – 11thdimension

+0

Woher weiß ein Paket, dass eine bestimmte Ressource mit einem bestimmten Namen in einem anderen Paket gefunden wird? Diese Annahme bedeutet, dass Sie die modulare Kapselung verletzen. Versuchen Sie, eine Lösung zu finden, die keine Annahmen über andere Module macht. Warum beschreiben Sie nicht das * reale * Problem, das Sie lösen möchten? –

Antwort

0

Um die Datei von Ihrem eigenen Bündel zu erhalten, können Sie tun:

Bundle bundle = FrameworkUtil.getBundle(this.getClass()); 
Enumeration<URL> resources = bundle.getResources("/com/me/myapp/style.css"); 
if (resources != null) { 
    URL myCSS = resources.nextElement(); 
}    

Wenn Sie das andere OSGi-Bundle-Objekt finden, können Sie dasselbe tun. Ich würde so etwas versuchen:

+0

Vielen Dank @Marcos Zolnowski Ich habe Ihren Code in einer meiner Klassen namens ** MainScreen **, aber ich kann nicht die Methode 'FrameworkUtil.getBundle' verwenden. Es wird eine Fehler-Hervorhebung mit der Warnung erhalten. Die Methode getBundle (Klasse ) ist für den Typ FrameworkUtil' nicht definiert. Was könnte das Problem sein? –

+0

FrameworkUtil ist eine Klasse aus dem org.osgi.framework-Paket. Das gleiche Paket von Bundle. Welche Version von OSGi verwenden Sie? –

+0

'org.apache.felix.framework; version = '[4,5)' ' –

Verwandte Themen