Java 包装jar的OSGi服务

Java 包装jar的OSGi服务,java,osgi,Java,Osgi,我正在尝试创建一个OSGi服务来包装另一个jar。我将jar添加到项目、类路径和二进制构建中。我在Activator中注册了该服务,但是当消费包调用该服务时,我在包装器jar上得到了java.lang.NoClassDefFoundError。有人知道我做错了什么吗 提前谢谢 您是否在清单中使用了Bundle类路径?为什么不使用现有的jar 您是否在清单中使用了Bundle类路径?为什么不使用现有的jar 你的行为可能有多种原因。为了确保这一点,我将检查以下内容: 假设您使用Eclipse,请

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


提前谢谢

您是否在清单中使用了Bundle类路径?为什么不使用现有的jar

您是否在清单中使用了Bundle类路径?为什么不使用现有的jar

你的行为可能有多种原因。为了确保这一点,我将检查以下内容:

  • 假设您使用Eclipse,请检查是否在清单编辑器的“Build”选项卡中包含了jar,以及是否在“Classpath”下的“Runtime”选项卡中指向了这个jar

  • 创建的包:它是否包含jar?它是否有指向jar的“Bundle ClassPath”头,比如:“Bundle ClassPath:lib/myLibrary.jar,。”(最后一个.需要包含来自Bundle根目录的类-您的activator f.i.)

  • 确保jar实际上包含所有必需的依赖项,或者通过包装包中的导入包头来表达它们。Eclipse有一个“导入向导”来实现这一点。顺便说一下,前面提到的bnd工具也做了同样的事情。希望这有助于


    • 你的行为可能有多种原因。为了确保这一点,我将检查以下内容:

      • 假设您使用Eclipse,请检查是否在清单编辑器的“Build”选项卡中包含了jar,以及是否在“Classpath”下的“Runtime”选项卡中指向了这个jar

      • 创建的包:它是否包含jar?它是否有指向jar的“Bundle ClassPath”头,比如:“Bundle ClassPath:lib/myLibrary.jar,。”(最后一个.需要包含来自Bundle根目录的类-您的activator f.i.)

      • 确保jar实际上包含所有必需的依赖项,或者通过包装包中的导入包头来表达它们。Eclipse有一个“导入向导”来实现这一点。顺便说一下,前面提到的bnd工具也做了同样的事情。希望这有助于


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


      作为补充说明,在Eclipse for development中,以这种方式创建捆绑包不太好(在运行时也很好)。如果您试图从另一个OSGi项目引用jar中的类或接口,IDE将无法解析任何内容,因为它无法“看到”jar中的文件。jar必须在bundle中进行扩展,以使所有内容都可见(在IDE中)。出于构建目的,Eclipse基于导入和导出自动创建适当的类路径引用。如果捆绑包中没有jar文件,则必须显式维护此类路径。

      是否导出使用者所需的包以及实现所需的所有包。消费者将需要导入将被引用的所有内容


      作为补充说明,在Eclipse for development中,以这种方式创建捆绑包不太好(在运行时也很好)。如果您试图从另一个OSGi项目引用jar中的类或接口,IDE将无法解析任何内容,因为它无法“看到”jar中的文件。jar必须在bundle中进行扩展,以使所有内容都可见(在IDE中)。出于构建目的,Eclipse基于导入和导出自动创建适当的类路径引用。如果捆绑包中没有jar文件,您将不得不显式维护这个类路径。

      我不是一直在构建它,我只是从Eclipse运行。然而,当我打包它时,lib-jar在包中,这在清单中:bundle ClassPath:,lib/the_-jar_-that_-is_-failing.jar,我在包上运行了安装文件并更新了消费者jar。此时,消费者jar没有启动。当我尝试启动它时,我得到了一个异常。我知道BND,但我希望了解我做错了什么,而不是“仅仅修复它”:)我不是一路构建来尝试它,我只是从Eclipse中运行。然而,当我打包它时,lib-jar在包中,这在清单中:bundle ClassPath:,lib/the_-jar_-that_-is_-failing.jar,我在包上运行了安装文件并更新了消费者jar。此时,消费者jar没有启动。当我尝试启动它时,我得到了一个异常。我知道BND,但我希望了解我做错了什么,而不是“仅仅修复它”:)是的,我正在使用Bundle类路径。我没有使用bnd,因为这是一个演示应用程序-它更多的是用于指导而不是实际使用。我想知道为什么这个问题与继续下去相反。这是由于单独的类路径造成的吗?例如,消费者看不到嵌入lib-jar的提供者?还有什么?是的,我正在使用Bundle类路径。我没有使用bnd,因为这是一个演示应用程序-它更多的是用于指导而不是实际使用。我想知道为什么这个问题与继续下去相反。这是由于单独的类路径造成的吗?例如,消费者看不到嵌入lib-jar的提供者?还有别的吗?我以前在OSGi捆绑包中使用过lib-jar,只是没有将服务委托给它们。我想我现在明白了-非常感谢!我以前在OSGi捆绑包中使用过lib-jar,只是没有将服务委托给它们。我想我现在明白了-非常感谢!