Eclipse软件包和插件有什么区别?

时间:2012-12-19 20:14:17

标签: eclipse eclipse-plugin package

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

enter image description here

enter image description here

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

enter image description here

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

enter image description here

ADDED

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

  1. 在eclipse中,当我使用外部类时,我可以使用Quick-Assistant或Organize import(Ctrl-Shift-O)来解析引用。 Eclipse在Imported Packages中为我正在处理的项目添加了包含该类的包。包可以包含多个类(类型)。 Eclipse了解哪个插件包含该包,并解决了参考问题。
  2. 插件(jar文件)可以包含多个包。通过在依赖项选项卡中指定所需的插件,我们可以引用eclipse IDE中所有Java项目的所有包(以及包中的类)。
  3. 根据我的经验,我必须添加所有依赖项才能使无头RCP独立( http://prosseek.blogspot.com/2012/12/headless-rcp-standalone.html)。

3 个答案:

答案 0 :(得分:3)

Eclipse插件基本上是一个OSGi包,其中包含Eclipse IDE理解和解释的附加plugin.xml文件。

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

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

所以你可以拥有你的OSGi应用程序(一组捆绑包; eclipse就是这样),它包括db-bundle(提供数据存储服务),app-domain-bundle(提供你的应用程序域服务)和远程-bundle(例如,通过REST向Web公开您的应用程序)。

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

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

用几句话来解释OSGi概念真的很难,我真的建议你在网上挖掘这个,甚至可以看看OSGi规范。

解释它的另一种方法是说bundle / plug-in是一个带有特定结构和元数据描述符(MANIFEST.MF和plugin.xml)的jar文件,它用Java语言概念描述它的内容 - 这是java包和此特定jar包含并将向OSGi运行时公开的服务,以便其他bundle可以使用它们。即bundle是物理可部署实体,而描述符是关于实际部署内容的元数据。

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

答案 1 :(得分:1)

如果要使用特定包但不关心哪个插件提供它,请使用Imported Packages。 OSGI将为您选择一个。

答案 2 :(得分:0)

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

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