gpt4 book ai didi

eclipse - 两个 Eclispse 项目 -> 一个 Eclipse 插件

转载 作者:行者123 更新时间:2023-12-02 17:54:54 27 4
gpt4 key购买 nike

背景

我是 Vrapper 的开发者项目。

Vrapper 包含 2 个主要部分

  • Vim 仿真库 (vrapper.core)
  • 很好用的Eclipse部分

  • 我们希望 vrapper.core 不知道 Eclipse,所以它是可重用的
    在 Eclipse 之外。目前,我们可以“vrap”各种 Eclipse
    文本编辑器和我们用于单元测试的小型模拟文本编辑器。

    vrapper.core 实现了各种 Vim 命令、模式等。
    那些都与 Platform 通信 - 一个抽象出来的接口(interface)
    底层的东西(文本编辑器、剪贴板、设置系统等)。

    当为编辑器创建模式时,它会询问平台是否有额外的
    适用于底层编辑器、当前编辑的文件类型等的命令。

    EclipsePlatform 使用 Eclipse 扩展点机制提供这些命令。

    因此,让我们考虑以下项目(还有更多):
  • vrapper.core - 独立于 Eclipse 的 Vrapper 代码
  • vrapper.eclipse - 依赖于 vrapper.core 的 Eclipse 插件
  • 环绕.core - 模拟环绕.vim(Vim 插件)的Eclipse 独立代码
  • around.eclipse - vrapper.eclipse 的 Eclipse 片段
    这使得它提供了来自 around.core 的命令。

  • 我们有两种方法可以处理这些:

    一个插件来统治一切

    从 Eclipse 的角度来看,它应该是这样的。
    有一个插件包含来自 vrapper.eclipse 和 vrapper.core 的代码,
    以及一个包含来自 around.core 和 around.eclipse 的代码的片段。

    很多插件
  • 有3个插件
  • 两个 OSGified 库 vrapper.core、surround.core
  • vrapper.eclipse
  • 在这种情况下,surround.eclipse 片段依赖于 vrapper.core

  • 问题

    许多插件解决方案都有一些我不明白的延迟类加载问题。
    这是因为当 vrapper.core 中的模式实例被创建时,他们需要
    要创建的来自 around.core 的类(通过 vrapper.eclipse -> around.eclipse)。

    如果您从 Eclipse 运行东西并从运行配置中选择所有插件,这将起作用,
    但是如果部署功能和插件并正常运行 Eclipse,则会引发异常
    因为找不到来自 around.core 的类。
    这是围绕着 around.core 的精神,要求来自
    依赖插件创建隐式循环依赖。

    我所说的隐式依赖是指在编译时没有核心类依赖于特定于 eclipse 的类。

    模式(如 vim 正常模式)是核心类。它们包含命令。有一些特定于特定 Eclipse 编辑器的命令(例如运行此特定于 JDT 的重构)。这些命令实现了核心接口(interface),但它们的代码(显然)存在于特定于 eclipse 的项目中。创建模式时,它会向底层平台询问一些额外的命令——这些额外的命令是在 eclipse 插件中实现的。这是当 eclipse 中的延迟类加载使运行时一切都崩溃时 - 扩展点引用了额外命令的类,但它们尚未加载。轰隆隆,异常(exception)。

    我试图通过使用“一个插件来统治它们”的方法来解决这个问题。
    只有一个插件对我来说似乎是更好的解决方案,但我无法让它干净利落地工作。

    对我来说唯一成功的是一个相当丑陋的黑客。
  • 所有 .core 项目都有一个 Ant 任务,用它们的类创建 .jar 文件
    并将其放入相应的 *.eclipse 项目
  • *.eclipse 项目包含这些 jars 并将它们登记在 list 文件中。

  • 这种丑陋的黑客方法的问题(除了它是丑陋的黑客)是
    这种发展变得非常痛苦。 Eclipse 代码导航、代码覆盖率
    Eclipse 中的其他一些东西停止工作。

    概括

    我们有 Eclipse 独立库 + Eclipse 特定的东西架构,
    但是我们真的需要所有这些都包含在一个插件中(因为在两个方向上都有一些依赖项)。

    如何将少数项目中的代码活成一个插件/片段?

    最佳答案

    原来添加Eclipse-BuddyPolicy: dependent到 MANIFEST.MF 文件,重新导出一些依赖项并将一个片段转换为插件(因此 BuddyPolicy 需要跟踪插件依赖项)是正确的解决方案。

    问题解决了 :-)

    关于eclipse - 两个 Eclispse 项目 -> 一个 Eclipse 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1773122/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com