访问另一个 osgi 捆绑包中的资源?

2022-09-04 00:49:05

我使用eclipse Plug-in项目向导(使用eclipse Helios)创建了两个OSGI捆绑包A和B。

在捆绑包 B 的清单文件中,我已将捆绑包 A 添加为依赖项。此外,我已经在A中导出了包,因此它们对于B是可见的。我在捆绑包 A 中还有一个 .properties 文件,我想让它对捆绑包 B 可见。在捆绑包 A 的 build.properties 窗格中,我指定了:

source.. = src/
bin.includes = META-INF/,\
               .,\
               bundle_A.properties

现在在捆绑包 B 中,我尝试使用以下方式加载 .properties 文件:

  private Properties loadProperties() {
    Properties properties = new Properties();
    InputStream istream = this.getClass().getClassLoader().getResourceAsStream(
        "bundle_A.properties");
    try {
      properties.load(istream);
    } catch (IOException e) {
      logger.error("Properties file not found!", e);
    }
    return properties;
  }

但这给出了一个空指针异常(在类路径上找不到该文件)。

是否可以从包 A 导出资源(就像导出包时一样)或以其他方式从 B 访问 A 中的文件(从包 B 访问包 A 的类装入器)?


答案 1

上的方法旨在用于此目的。您可以使用它从任何捆绑包加载任何资源。另请参阅方法,如果您不知道捆绑包内资源的确切路径。getEntry(String)BundlefindEntries()getEntryPaths()

无需获取捆绑包的类装入器即可执行此操作。


答案 2

如果你正在编写一个 Eclipse 插件,你可以尝试如下方法:

Bundle bundle = Platform.getBundle("your.plugin.id");

Path path = new Path("path/to/a/file.type");

URL fileURL = Platform.find(bundle, path);

InputStream in = fileURL.openStream();

推荐