5

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

在此处输入图像描述

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

添加

基于这篇文章 -如何从 Eclipse 导入包?和shiplu的回答。这就是我明白的。如果我错了,请纠正我。

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

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

4

3 回答 3

4

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

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

OSGi 是关于拥有模块化应用程序的,因此它定义了多个级别的模块化。一个这样的级别是捆绑级别(模块级别)的模块化,更细粒度的级别是包级别的模块化。

因此,您可以拥有由 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 包才能运行,它并不关心哪个包提供它,它只需要这个服务的一个实例才能工作。因此,您可以拥有多个提供 dbstore.service 实现的包,并且域包可以在运行时选择要使用的服务。

用几句话来解释 OSGi 概念真的很难,我真的建议你在网上搜索一下,甚至看看 OSGi 规范。

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

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

于 2012-12-19T21:18:49.623 回答
1

当您想使用Imported Packages特定包但不关心哪个插件提供它时使用。OSGI 将为您选择一个。

于 2012-12-19T20:17:42.293 回答
0

Eclipse 插件类似于 IDE 本身的扩展。但导入的包实际上是您将在当前项目中使用的包。

一个用于开发 IDE,另一个用于您正在编码的项目。

于 2012-12-19T20:24:38.333 回答