2

我正在使用 Eclipse 和 Equinox 编写两个 OSGi 包。

我的第一个捆绑包,捆绑包 A,在项目中:捆绑包 A。我的第二个捆绑包 B,在捆绑包 B 中。

Bundle B 加载一个文件 server.cfg,该文件位于它的项目根目录中(即:workspace/Bundle B/server.cfg)。

当我执行 OSGi 框架时,它是从 workspace/ 目录执行的,并且 Bundle B 找不到 server.cfg,因此会引发错误。它正在查看工作空间/server.cfg 而不是工作空间/Bundle B/server.cfg。

我可以将工作目录更改为 Bundle B,它将找到 server.cfg 文件。但是,Bundle B 无法找到 Bundle A 的任何类,因此会引发错误。

我不确定如何通知 Bundle B 文件的位置,同时仍然能够从 B 访问 Bundle A 的类。

我正在使用 Eclipse 3.6.2。


更新:
我通过执行以下操作解决了这个问题:将工作目录设置为 Bundle B,然后在清单文件中导出/导入 Bundle A。这似乎奏效了。

4

1 回答 1

2

You shouldn't have to set the working directory. Try:

URL url = bundleB.getEntry("server.cfg");
File file = new File(FileLocator.toFileURL(url).getFile());

Also make sure your server.cfg file is exported in your build.properties (Build tab of the Manifest Editor).

于 2013-01-25T00:02:13.277 回答