2016-04-02 52 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]'' –

相关问题