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