在Dependencies选项卡中,我可以选择插件和包。
他们之间有什么区别?对于org.eclipse.compare
,我在导入的包中以及插件中都有它。
我在plugins目录中找到了jar文件,但我不知道org.eclipse.compare的包文件位于何处。
在导出菜单中,似乎只有导出到jar,而不是导出插件或包。我该如何导出包裹?
根据这篇文章 - How to import a package from Eclipse?和shiplu的回答。这就是我所理解的。如果我错了,请纠正我。
Imported Packages
中为我正在处理的项目添加了包含该类的包。包可以包含多个类(类型)。 Eclipse了解哪个插件包含该包,并解决了参考问题。根据我的经验,我必须添加所有依赖项才能使无头RCP独立( http://prosseek.blogspot.com/2012/12/headless-rcp-standalone.html)。
答案 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另一个用于您正在编码的项目。