当我们在 Eclipse 插件依赖项中有 `Required Plug-ins` 时,为啥我们需要 `Imported Packages`?

Posted

技术标签:

【中文标题】当我们在 Eclipse 插件依赖项中有 `Required Plug-ins` 时,为啥我们需要 `Imported Packages`?【英文标题】:Why do we need `Imported Packages` when we have `Required Plug-ins` in Eclipse plugin dependencies?当我们在 Eclipse 插件依赖项中有 `Required Plug-ins` 时,为什么我们需要 `Imported Packages`? 【发布时间】:2012-12-07 05:57:32 【问题描述】:

在开发 Eclipse 应用程序时,MANIFEST.MF 中的依赖项选项卡有两列。

一个是Required Plug-ins,另一个是Imported Packages

我们有Required Plug-ins,为什么还需要Imported Packages

评论说“这个插件依赖于没有明确识别它们的原始插件”,但我不确定在什么情况下不想明确识别它们的原始插件,有什么好处?

添加

相关问题 - What's the difference between Eclipse Packages and Plug-ins?

【问题讨论】:

并非每个导入的包都包含插件。首先使用所需的插件。必要时使用导入的包。 【参考方案1】:

导入一个包比需要一个包提供了一个额外的间接级别。

考虑一些标准 API 的情况...org.standard.framework。假设有两家公司实现了这个 API,也许你有包 com.abc.frameworkcom.xyz.framework。这两个实现包都会导出org.standard.framework 包。

现在假设,您需要一个org.standard.framework 实现,但您并不特别关心是哪一个。如果您需要 com.abc.frameworkcom.xyz.framework 捆绑包,那么您将自己绑定到特定的实现。使用 import-package 指令,您可以让 OSGi 充当间接层。

import-package 的另一个优点是,如果一个包被移动到另一个包,你的依赖项不需要改变。当捆绑包被分解或组合时,在重构期间可能会出现这种情况。

由于这些原因,OSGi 规范编写者现在通常建议使用相对较新的 import-package 指令而不是 require-bundle。问题是并非所有的捆绑包都为此做好了准备。许多人在导出包时还没有指定版本。这使得 import-package 在许多情况下变得不切实际。

【讨论】:

很好的解释!但我认为,与 require-bundle 相比,添加一些关于 import-package 的缺点也是一个好主意:使用 require-bundle 可以更轻松地快速清楚地了解您的项目所依赖的组件。 也更容易找到依赖项。 import-package 灵活性的代价是降低了清晰度。(我认为这方面非常重要,当人们争论应该使用 import-package 时,通常不会考虑到这一点。)【参考方案2】:

指定对整个插件的依赖,如果你有很多插件,那么只有一个必需的包可能会创建一个循环依赖。最好只指定您实际需要的包。对于少量的插件,如果您确定能够有效地维护依赖关系,欢迎您通过指定整个插件来简化您的生活。希望这会有所帮助。

【讨论】:

以上是关于当我们在 Eclipse 插件依赖项中有 `Required Plug-ins` 时,为啥我们需要 `Imported Packages`?的主要内容,如果未能解决你的问题,请参考以下文章

[在运行菜单项中添加Eclipse默认菜单项

将 Cordova 6.1.2-Project 导入 Eclipse:Android 依赖项中缺少 cordovalib.jar

我可以选择我在 Maven 依赖项中使用的唯一包来在 Eclipse 中导出可运行的 jar 吗?

为啥即使我的 maven 依赖项中有第三方依赖项,也只需要 OSGi 容器中的第三方依赖项?

如何将 pom 中的依赖项加载到 eclipse 项目的类路径中?

阿里巴巴Java开发手册及Java代码规约扫描eclipse插件