0

我正在尝试创建一个包装另一个 jar 的 OSGi 服务。我将 jar 添加到项目、类路径和二进制构建中。我在 Activator 中注册了该服务,但是当消费包调用该服务时,我在包装 jar 上得到一个 java.lang.NoClassDefFoundError 。有谁知道我在这里做错了什么?

提前致谢。

4

3 回答 3

2

您是否正在导出消费者所需的包,以及实施所需的所有包。消费者将需要导入将被引用的所有内容。

附带说明一下,以这种方式创建包在 Eclipse 中不能很好地用于开发(在运行时可以正常工作)。如果您尝试从另一个 OSGi 项目引用 jar 中的类或接口,IDE 将不会解析任何内容,因为它无法“看到”jar 中的文件。必须在包中扩展 jar 才能使所有内容都可见(在 IDE 中)。Eclipse 基于导入和导出自动创建适当的类路径引用以用于构建目的。如果包中没有 jar 文件,您将不得不显式维护这个类路径。

于 2009-04-20T14:02:49.787 回答
1

您的行为可能有多种原因。为了确保,我会检查以下内容:

  • 假设您使用 Eclipse 检查您是否已将 jar 包含在清单编辑器的“构建”选项卡中,并在“类路径”下的“运行时”选项卡中指向这个 jar。

  • 创建的包:它是否包含 jar?它是否具有指向 jar 的“Bundle-ClassPath”标头,例如:“Bundle-ClassPath: lib/myLibrary.jar,”。(最后一个 . 需要包含来自捆绑包根目录的类 - 您的激活器 fi)

  • 确保 jar 实际上包含所有必需的依赖项,或者通过包装包中的 Import-Package 标头表达它们。为此,Eclipse 有一个“导入向导”。顺便说一下,前面提到的 bnd 工具也是如此。希望有帮助...

于 2009-04-18T10:21:52.190 回答
0

您是否在清单中使用了 Bundle-Classpath?为什么不对现有的 jar使用bnd ?

于 2009-04-18T02:51:55.327 回答