在开发 Eclipse 应用程序时,MANIFEST.MF 中的依赖项选项卡有两列。
一个是Required Plug-ins
,另一个是Imported Packages
。
为什么我们需要Imported Packages
时Required Plug-ins
?
评论说“这个插件依赖于没有明确标识它们的原始插件”,但我不确定在什么情况下不想明确标识它们的原始插件,它的优势是什么?
在开发 Eclipse 应用程序时,MANIFEST.MF 中的依赖项选项卡有两列。
一个是Required Plug-ins
,另一个是Imported Packages
。
为什么我们需要Imported Packages
时Required Plug-ins
?
评论说“这个插件依赖于没有明确标识它们的原始插件”,但我不确定在什么情况下不想明确标识它们的原始插件,它的优势是什么?
导入一个包比需要一个包提供了一个额外的间接级别。
考虑一些标准 API 的情况org.standard.framework
...... 假设有两家公司实现了这个 API,也许你有 bundlescom.abc.framework
和com.xyz.framework
. 这两个实现包都会导出org.standard.framework
包。
现在假设,您需要一个org.standard.framework
实现,但您并不特别关心是哪一个。如果您需要其中一个com.abc.framework
或com.xyz.framework
捆绑,则您将自己绑定到特定的实现。使用 import-package 指令,您可以让 OSGi 充当间接层。
import-package 的另一个优点是,如果将包移动到另一个包,您的依赖项不需要更改。当捆绑包被分解或组合时,在重构期间可能会出现这种情况。
由于这些原因,OSGi 规范编写者现在通常建议使用相对较新的 import-package 指令而不是 require-bundle。问题是并非所有的捆绑包都为此做好了准备。许多人在导出包时还没有指定版本。这使得 import-package 在许多情况下变得不切实际。
指定对整个插件的依赖,如果你有很多插件,那么只有一个必需的包可能会创建一个循环依赖。最好只指定您实际需要的包。对于少量的插件,如果您确定能够有效地维护依赖关系,欢迎您通过指定整个插件来简化您的生活。希望这可以帮助。