4

NoClassDefFoundError在运行时得到一个,我认为该"uses"指令会避免这种情况,因为我认为它创建了传递性(如果我错了,请纠正我)。这是我的配置:

Bundle 1 
  Export-package A

Bundle 2 
  Export-package B, uses "A"
  Import-package A

Bundle 3
  Import-package B

现在,当 Bundle 3 调用B中的类,而后者又调用A中的类时,就会发生异常。基于控制台,我可以看到BundleClassLoader在捆绑包 3 中查找类(换句话说,在其本身),但在捆绑包 1 中找不到它。如果我强制 BND 在 Bundle 3 中导入 A 一切正常,但它看起来太费力了。我觉得我错过了一些东西。Equinox 不应该使用清单中的信息来设置捆绑类路径吗?或者在最坏的情况下,BND 不应该检测 3 对 1 的依赖并在 3 的清单中导入包 A 吗?

我所有的捆绑包都是active并且我没有uses违反约束

4

1 回答 1

1

Bundle 2 也必须导入 A。使用 A 表示任何导入我的 B 并导入 A 的包必须导入与我相同的 A。由于捆绑包 2 不导入 A,因此这是行不通的。此外,bundle 3 需要导入 A,因为 B 使用 A。任何 B 的导入器也是 A 的用户,因此必须导入 A。

于 2012-12-14T01:08:51.847 回答