现在,我正在尝试创建一个依赖于其他 jar 的 Eclipse 插件;因此,我在 jar 上创建了一个插件库,并将其部署在我的 Eclipse 插件文件夹下。当我通过 Eclipse 从我的工作环境启动它时,它运行良好。但是,一旦我将它导出到一个 jar 并部署到 Eclipse 中,它就不再工作了,因为它无法找到依赖的 jar。发生了什么以及如何解决问题?有人知道吗?请救救我。
4 回答
MANIFEST.MF 有一个名为“Dependencies”的选项卡,所有插件都应在其中放置当前插件所依赖的所有插件。在运行时,您必须将“依赖项”插件放在与您要启动或要使用的插件相同的文件夹中。
当一个插件有它应该使用的 jars 时,你必须将 jars 放到“Runtime”类路径条目中,并且应该将 jars 添加到“Build”Binary Build 条目中。
此外,与您的“外部 jar”插件关联的 plugin.xml 是否导出了正确的包?
您是否查看过这篇描述将 3rd 方 jar 打包为插件所需的所有步骤的文章?
其他非常重要的点在 OSGI Enterprise 应用程序中的 PDE 和 3rdParty Bundles文章中进行了描述,其规则如下:
始终将依赖的 JAR 文件放在单独的包中,并在清单文件中描述依赖关系。不要将这些 JAR 隐藏在您自己的包中。
如果可能,请使用 Import-Package 来解决您的依赖关系。
仅导出您的“公共”包 - 没有内部包。
仅使用 Require-Bundle 来解决您自己的“宇宙”内的依赖关系,而不是针对常见的捆绑包。
始终版本 Require-Bundle、Import-Package 和 Export-Package。
Require-Bundle始终依赖于具有特定名称的包。
Import-Package不依赖于包的名称,因此它更灵活。当然,与使用 Require-Bundle 的单行程序相比,查看您的包并决定需要导入或导出哪些包需要做更多的工作如果一个包本身包含包内的包并导出它们,切勿将这些包也作为导入包放入清单中。
在将捆绑包部署为插件之前,请确保重新计算 Package-Uses。导出包的错误包使用条目可能会阻止 PDE 导出您的插件。
Eclipse 的工作行为是正常的,因为依赖的 jar 在项目的类路径中。
你看过你部署的插件文件夹吗?我怀疑插件文件夹中不包含依赖项。
我只是有一个类似的问题。我使用插件视图修复了它:
- 使用 Runtime 选项卡的 Classpath 部分添加 jar
- 使用概览选项卡中的组织清单向导进行所有必需的清单更改
- 使用概览选项卡中的导出向导导出完成的插件。
注意我使用的是 Eclipse 3.3,所以你的里程可能会有所不同。