Eclipse 包和插件有什么区别?

pro*_*eek 6 eclipse eclipse-plugin package

在“依赖项”选项卡中,我可以在插件和包之间进行选择。他们之间有什么区别?对于org.eclipse.compare,我有它导入的包和插件中。

在此输入图像描述

在此输入图像描述

我在plugins目录中找到了jar文件,但我不知道org.eclipse.compare的包文件位于哪里。

在此输入图像描述

在导出菜单中,似乎只有导出到jar,而不是导出插件或包。如何导出包?

在此输入图像描述

添加

基于这篇文章 - How to import a package from Eclipse? 和shiplu的回答。这就是我的理解。如果我错了,请纠正我。

  1. 在 Eclipse 中,当我使用外部类时,我可以使用快速助手或组织导入(Ctrl-Shift-O)来解析引用。Imported PackagesEclipse 添加了包含我正在处理的项目的类的包。一个包可以包含多个类(类型)。Eclipse 了解包中包含哪些插件,并解决引用问题。
  2. 一个插件(jar 文件)可以包含多个包。通过在dependency选项卡中指定所需的插件,我们可以引用eclipse IDE中所有java项目的所有包(以及包中的类)。

根据我的经验,我必须添加所有依赖项才能使 headless RCP 独立(http://prosseek.blogspot.com/2012/12/headless-rcp-standalone.html)。

Svi*_*len 4

Eclipse 插件基本上是一个 OSGi 捆绑包,带有 Eclipse IDE 可以理解和解释的附加 plugin.xml 文件。

因此,您的问题的答案在于 OSGi 规范和 OSGi 编程模型,因为简单地说,Eclipse 是一个运行在名为 Equinox 的 OSGi 实现上的应用程序。

OSGi 的核心是模块化应用程序,因此它定义了多个级别的模块化。其中一个级别是捆绑级别(模块级别)模块化,而更细粒度的级别是包级别模块化。

因此,您可以拥有 OSGi 应用程序(一组捆绑包;Eclipse 就是这样),其中包含 db-bundle(提供数据存储服务)、app-domain-bundle(提供应用程序域服务)和 Remote-bundle(例如,它通过 REST 向 Web 公开您的应用程序)。

然后你说remote-bundle依赖于domain-bundle,而domain-bundle又依赖于db-bundle。这一切都很好,但是削弱了 OSGi 提供的固有模块化性,因为您基本上将应用程序限制为 db-bundle 和 Remote-bundle 的特定实现,即它们提供的服务的特定实现。

相反,您可以不在捆绑包之间而是在包之间建立上述依赖关系,即建立服务级别依赖关系。然后你说domain-bundle需要dbstore.service包才能运行,它并不关心哪个bundle提供它,它只需要该服务的一个实例就可以工作。因此,您可以拥有多个提供 dbstore.service 实现的捆绑包,并且域捆绑包可以在运行时选择要使用的服务。

用几句话来解释 OSGi 概念确实很困难,我真的建议你在网上深入研究一下,甚至可以看看 OSGi 规范。

另一种解释方式是说bundle/plug-in是一个具有特定结构和元数据描述符(MANIFEST.MF和plugin.xml)的jar文件,它用Java语言概念描述了它的内容——java对这个特定的包和服务进行了哪些封装和服务。 jar 包含并将暴露给 OSGi 运行时,以便它们可以被其他包使用。即,捆绑包是物理可部署实体,而描述符是有关实际部署内容的元数据。

编辑:包或服务级别的依赖关系也有一些缺点,正如 Lii 在下面的评论中指出的那样,主要的一个缺点是它增加了依赖模型的复杂性和动态性。看看她或他下面的评论 - 值得一读!