导出依赖于外部 jar 的 Eclipse 插件

Exporting an Eclipse plugin with a dependency on an external jar

最近刚开始使用 Eclipse,运行 遇到导出我正在处理的插件的问题。我尝试搜索,但到目前为止没有成功 - 但如果答案已经在这里,如果有人能指出我,我将不胜感激。

我正在用 Eclipse 编写一个 OSGi/Equinox 插件。该插件适用于允许扩展的第 3 方系统:基本上所有放置在应用程序插件文件夹中的 jar 都会在启动时自动加载到应用程序中。我已经设法将我的插件放在一起,它加载正常并且可以正常工作。 问题是我依赖另一个插件,它位于我的插件文件夹中。出于显而易见的原因,我不想将该插件打包到我的插件 jar 文件中。我试图将依赖项添加为外部存档,但这会破坏导出:当我尝试导出我的插件项目时,蚂蚁抱怨缺少依赖项和类型。 (如果我真的在我的插件中包含其他 jar 文件,一切正常,但显然这不太理想。)

所以:我如何设置我的插件项目依赖关系,它是 a) 外部依赖关系和 b) 不需要用路径或变量指定 - 即我如何告诉我的出口商 "don't worry, it will be there right beside you"?

编辑:显然有一个重要的细节我没有提到。我依赖的外部 jar 文件 不是 一个 OSGi 插件,只是一个带有一些 类 的普通 jar 文件。对于 3rd 方系统,它似乎都是一样的(都在插件文件夹下,都加载到应用程序中),但对于 Eclipse,区别似乎很重要。

如果您在插件 MANIFEST.MF 中引用其他插件作为依赖项,则导出应该可以正常工作。该插件应列在 MANIFEST.MF 中的 Require-Bundle 列表中。

您可以在 MANIFEST.MF 编辑器中执行此操作,方法是添加到编辑器 'Dependencies' 选项卡上的 'Required Plug-ins' 列表。

注意:引用其他插件时必须始终使用此方法。不要尝试将插件 jar 添加到 Java 构建路径或类似的东西。

如果您要使用的 jar 不是 Eclipse 插件,您必须将其作为插件的一部分包含在内,并在 MANIFEST.MF 中的 Bundle-Classpath 中列出该 jar。如果你不能这样做,你可以在 Bundle-Classpath 中引用一个外部 jar,使用类似的东西:

Bundle-Classpath: .,external:$LIB_LOCATION$/lib.jar

.是插件代码的正常入口。 external:$LIB_LOCATION$/lib.jar 在环境变量 LIB_LOCATION 定义的位置查找 lib.jar。这种方法可能很难正确。

最后,我的特定问题的解决方案是将外部 jar 文件添加为构建属性选项卡上的额外类路径条目(这转换为 build.properties 文件中的 "jars.extra.classpath = .jar" 条目).我还将 jar 文件添加到项目本身 - 添加额外的 class 路径条目后自动更改为外部依赖项。

通过这两项更改,我能够成功导出我的插件,它不包含外部 jar 文件,但在加载到第 3 方系统时能够引用它。