2016-04-02 88 views
0

我的項目目錄結構(在Eclipse):我如何去使用一個OSGi包一個** ** CSS資源文件從另一個OSGi包

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 

我想在CSS文件中使用的style.css在類StyleImpl.java包含在OSGi包MyProjectContainingCSS在其他OSGi包MyProjectContainingCSS

是這樣的:

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

我如何才能在另一個OSGi包的一個OSGi包中使用CSS資源文件?

謝謝大家提前。

UPDATE

的bnd.bnd文件

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: * 

潤描述

-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

在CSS包中創建一個類,將InputStream公開爲CSS文件並將該類導入到另一個包中。 – 11thdimension

+0

一個包如何知道在另一個包中可以找到具有特定名稱的特定資源?這種假設意味着你違反了模塊化封裝。嘗試找到一個不會對其他模塊做出假設的解決方案。爲什麼不描述你正試圖解決的*真實*問題? –

回答

0

爲了讓您自己的捆綁文件,你可以這樣做:

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

如果你能找到其他的OSGi bundle對象,你可以這樣做。我會嘗試這樣的:

Bundle bundle = FrameworkUtil.getBundle(this.getClass()); 
    Bundle[] bArray = bundle.getBundleContext().getBundles(); 
    Bundle cssBundle = null; 
    for (Bundle b : bArray){ 
     if(b.getSymbolicName().equals("com.me.myapp")) { 
      cssBundle = b; 
      break; 
     } 
    } 
    Enumeration<URL> resources = cssBundle.getResources("/com/me/myapp/style.css"); 
    if (resources != null) { 
     URL myCSS = resources.nextElement(); 
    } 
+0

非常感謝@Marcos Zolnowski我把你的代碼放在我的一個類** MainScreen **中,但是我無法使用'FrameworkUtil.getBundle'方法。它會得到一個錯誤突出顯示,其中的方法getBundle(Class )未定義爲類型FrameworkUtil'。可能是什麼問題呢。 –

+0

FrameworkUtil是org.osgi.framework包中的一個類。相同的Bundle包。你使用的是什麼版本的OSGi? –

+0

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

相關問題