我是Vrapper项目的开发人员。
Vrapper包含2个主要部分
我们希望vrapper.core是Eclipse不知道的,所以它是可重用的 在Eclipse之外。目前,我们可以“整理”各种Eclipse 文本编辑器和我们用于单元测试的小型模拟文本编辑器。
vrapper.core实现了各种Vim命令,模式等。 这些都与平台进行通信 - 一个抽象出来的界面 基础内容(文本编辑器,剪贴板,设置系统等)。
当为编辑器创建模式时,它会询问平台是否有额外的 适用于底层编辑器,当前编辑的文件类型等的命令
EclipsePlatform使用Eclipse扩展点机制提供这些命令。
所以,让我们考虑以下项目(还有更多):
我们可以通过两种方式处理这些问题:
从Eclipse的角度看它应该是这样的。 有一个插件包含来自 vrapper.eclipse 和 vrapper.core 的代码, 和一个包含来自 surround.core 和 surround.eclipse 的代码的片段。
许多插件解决方案都存在一些我不理解的延迟类加载问题。 这是因为他们需要创建来自 vrapper.core 的模式实例 来自 surround.core 的类(通过 vrapper.eclipse - > surround.eclipse )。
如果你从Eclipse运行东西并从运行配置中选择所有插件,这是有效的, 但是,如果一个部署功能和插件和运行eclipse通常会抛出异常 因为找不到来自surround.core的类。 这是 surround.core的精神,需要额外的命令 依赖插件创建隐式循环依赖 。
隐式依赖关系是指在编译时没有核心类依赖于特定于eclipse的类。
模式(如vim普通模式)是核心类。它们包含命令。有一些特定于Eclipse编辑器的命令(比如运行这个特定于JDT的重构)。这些命令实现了核心接口,但它们的代码(显然)存在于特定于eclipse的项目中。创建模式时,它会向底层平台询问一些额外命令 - 这些额外命令是在eclipse插件中实现的。这是当eclipse中的延迟类加载使得一切都在运行时爆炸 - 额外命令的类被扩展点引用,但它们尚未加载。繁荣,例外。
我尝试使用“一个插件来统治所有”方法来解决这个问题。 只有一个插件对我来说似乎是更好的解决方案,但我无法干净利落地工作。
只有对我来说成功的事情才是一个丑陋的黑客。
这种丑陋的黑客方法的问题(除了它是丑陋的黑客)是 这种发展变得非常痛苦。 Eclipse代码导航,代码覆盖 Eclipse中很少有其他东西停止工作。
我们有
如何将来自少数项目的代码转换为一个插件/片段?
答案 0 :(得分:4)
事实证明,向MANIFEST.MF文件添加Eclipse-BuddyPolicy: dependent,重新导出一些依赖项并将一个片段转换为插件(因此BuddyPolicy有插件依赖项跟踪)是正确的解决方案。
问题解决了: - )
答案 1 :(得分:0)
从阅读本文来看,听起来好像实际问题是两个方向都存在依赖关系。难道你不能重构你的项目,只能让Eclipse-spcific项目依赖于核心项目,而不是相反吗?