我创建了一个 Eclipse 4 应用程序,我需要一个 jar
提供一个功能作为我的应用程序的一部分(这可以是任何东西,例如 log4j
以使其变得微不足道)。< br/>
我将 jar
添加为项目类路径的一部分(Right Click->Configure Build Path
),但在运行时我的服务因 ClassNotFound
错误而失败(我猜是来自 OSGI?)。
无论如何搜索结果,至少据我所知,我应该将 jar 添加为另一个 Plugin
的一部分,并创建从我的应用程序/服务到这个新插件的依赖关系。
IE。我从现有的 JAR 文件中创建了一个插件项目
。
这次设置成功了。
所以如果我理解这一点,在为 Eclipse/OSGi 开发时我们不应该直接在类路径中添加 jars
而是通过插件添加它们(为什么?)。
问题:如果到目前为止我是正确的,那么在开发项目时包含jars
的标准做法是什么?
从现有的 JAR 文件定义/创建一个插件项目
,并添加所有所需的第三方库,或根据需要有不同的插件项目jar
或可能是其他东西???
对不起,如果我的术语不准确。我是 OSGi 和 Eclipse 编程的新手
注意:在谈论 jars
时,我并不是指其他 OSGi 服务。我指的是使用应用程序的许多部分都需要的现成的、可靠的第三方库的规范。例如。 log4j
或 xml 解析库或 apache commons
等
最佳答案
对于运行时,始终是 Manifest 和那里的 header 控制您的包类路径中的内容。可以通过三种方式访问 jar:
导入包 header 。这是推荐的方式。您为每个需要的包定义一个导入。您要访问的 jar 必须作为 bundle 部署在运行时中。它还需要导出所有需要的包。
要求捆绑。这是访问包的另一种方式。您定义所需的包的 ID 并查看它导出的所有包。由于 Require-Bundle 将您与其他 bundle 更紧密地绑定(bind)在一起,因此应该首选 Import-Package 方式。
捆绑类路径。这允许将 jar 添加到您嵌入到自己的包中的类路径。当其他方法不起作用时,这应该只是最后的手段。将此方法与其他方法混合使用时,您可能会遇到严重的类加载问题。
您可以在 Maven Central 中找到许多预构建的包。现在许多 jar 已经包含 OSGi list 。对于不是这样的情况,许多 jar 被 servicemix 重新打包为包。请参阅 groupId:org.apache.servicemix.bundles。还有 spring bundle 存储库,您可以在其中找到更多信息。
下面我列出了一些您可能想要阅读的资源:
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/
关于java - 如何从 eclipse/osgi 应用程序中包含对 jar 文件的依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12569474/