0

我在一个小型 OSGI 项目中遇到了一些问题。在其中一个包中,我以编程方式安装并启动了另一个以前未安装的包。

尽管如此,当我在 Eclipse 中运行项目时,ClassNotFoundException会在执行包中跳转。

我相信这是因为 Eclipse 会使用指向 dev.properties 文件的 -dev 参数(开发模式)自动启动项目,在该文件中它指定了构建每个包的 bin 文件夹。显然这个由 Eclipse 创建的 dev.properties 文件不包括我稍后要安装的包。

该项目在 Eclipse 之外运行良好,并且 jar 是正确的,但是当我在 Eclipse 中运行它时,ClassNotFoundException 会跳转。发生这种情况是因为当我在开发模式下启动 eclipse 时,会创建一个 dev.properties 文件来增强框架的类路径。但是,当我想安装新包时,当新事件发生时 dev.properties 不会更新,而且 Eclipse 也不允许我使用自定义的 dev.properties 文件,因此框架无法从该新包中加载类.

有什么方法可以使用自定义的 dev.properties 或更改任何可以使其在 eclipse 中工作的东西?

这是代码的一个小示例:

 public void charge(String location){
    try {
        System.out.println("Entró");
        bundle2= bundleContext.installBundle(location);
        System.out.println("Instalado");

        bundle2.start();
        System.out.println("Activado");

    } catch (BundleException e) {
        e.printStackTrace();
    }
}
4

3 回答 3

2

当您使用 PDE 从 Eclipse 中启动 Equinox 框架实例时,“开发”模式用于增强框架的类路径,以从插件项目中的“bin”文件夹加载类和资源。

如果某些东西在 Eclipse 中运行时有效,但在导出/构建和外部运行时不起作用,则可能是 build.properties 文件中缺少某些内容(如果使用了任何 PDE 导出功能)或缺少某些包导入在 MANIFEST.MF 中。

您能否提供有关设置以及如何生成在 Eclipse 之外运行的位的更多详细信息?

于 2012-07-02T12:22:55.397 回答
0

我不认为 dev.properties 应该这样使用,但无论如何,OSGi 是动态的,如果你安装一个包,它应该可以工作,无论 -dev 模式如何。

可能是您安装的 jar 或文件夹不正确?我建议你从 eclipse 中导出你正在安装的包(从项目 -> 导出 -> 可部署插件)。

如果你的 build.properties 是正确的,你应该得到一个正确的 jar。尝试安装那个 jar。

于 2012-07-02T08:33:18.567 回答
0

如果您使用的是调试配置-> OSGi 框架。确保选中这些选项:

  • Include optional dependencies when computing required bundles
  • Add new workspace bundles to this launch configuration automatically.

这样,每次您在工作区中添加或创建新插件时,它都会被添加到执行中。

于 2012-07-12T21:15:00.977 回答