如何从eclipse/osgi应用程序中包含对jar文件的依赖?

Cra*_*lus 9 java eclipse plugins osgi eclipse-plugin

我创建了一个Eclipse 4应用程序,我需要jar提供一个功能作为我的应用程序的一部分(这可能是任何事情,例如log4j使其变得微不足道).
我添加了jar作为项目的classpath(Right Click->Configure Build Path)的一部分,但在运行时我的服务失败并出现ClassNotFound错误(我猜是来自OSGI?).
无论如何,搜索到这一点,至少据我所知,我应该将jar作为另一个的一部分添加,Plugin并从我的应用程序/服务创建一个依赖于这个新的插件.
即我创造了一个Plugin Project from Existing JAR archives.
这次设置工作.
所以,如果我理解这一点,在为Eclipse/OSGi开发时,我们不应该jars直接添加类路径,而是通过插件添加它们(为什么?).
问题:如果到目前为止我是正确的,jars在开发项目时要包括哪些标准做法?
定义/创建一个Plugin Project from existing JAR archives并添加所需的所有必需的第三方库,或者根据需要jar 其他可能的其他插件项目???
对不起,如果我的术语不准确.我是OSGi和Eclipse编程的新手

注意:谈到jars我不是指其他OSGi服务.我指的是使用应用程序的许多部分所需的准备好的,可靠的第三方库的规范.例如,log4j或xml解析库apache commons

Chr*_*der 5

对于运行时,它总是Manifest和那里的标题来控制bundle类路径中的内容.有三种方法可以访问jar:

  1. Import-Package标头.这是推荐的方式.您需要为每个包定义一个导入.您要访问的jar必须作为bundle在运行时中部署.它还需要导出所有需要的包.

  2. 需要捆绑.这是访问捆绑包的另一种方法.您可以定义所需包的ID,并查看它导出的所有包.由于Require-Bundle会将您与其他bundle绑定得更紧密,因此应首选Import-Package方式.

  3. Bundle-Classpath.这允许将jar添加到嵌入到自己的包中的类路径中.当另一种方式不起作用时,这应该只是最后的手段.将此与其他方法混合时,您可能会遇到令人讨厌的类加载问题.

你可以在maven中心找到许多预制的捆绑包.今天许多罐子已经包含OSGi清单.对于不适用的情况,许多罐子由servicemix重新打包为捆绑包.请参阅groupId:org.apache.servicemix.bundles.还有弹簧束存储库,您可以在其中找到更多.

下面我列出了一些您可能想要阅读的资源:

http://www.aqute.biz/Blog/2007-02-19

http://wiki.osgi.org/wiki/Import-Package

http://wiki.osgi.org/wiki/Require-Bundle

http://www.vogella.com/blog/2009/03/27/required-bundle-import-package/


Rob*_*bin 3

您提到的示例可以作为 OSGi 捆绑包提供,因此您不需要自己制作它们。您通常不会在 OSGi 中使用直接的 jar 依赖项,您通常使用包或捆绑包依赖项。在您引用的 log4j 示例中,您应该使用import package,因为可以有多个捆绑包提供程序(较新的 log4j jar、旧 log4j 的 springsource 捆绑版本、slf4j 实现...)。这将断开您的代码依赖关系与实际提供程序的连接。

这些依赖项是通过您的清单维护的,而不是您的项目类路径。在 Eclipse 插件项目中,项目构建类路径源自清单中的条目。

即使您不使用服务,所有代码依赖项仍然通过清单维护。