【问题标题】:How to find out which feature contains a needed plug-in on an Eclipse download site如何在 Eclipse 下载站点上找出包含所需插件的功能
【发布时间】:2012-04-19 00:22:43
【问题描述】:

在针对目标平台开发 RCP 应用程序时,我 (and others) 经常遇到需要从 Eclipse 发布软件站点添加的依赖项。每当我的 IDE 中包含插件但目标平台中未包含插件时,当我尝试从产品定义运行应用程序时,我会收到一个警告屏幕,通知我无法解析此类捆绑包。

“没问题,只需将包含插件的特性从Eclipse下载站点添加到目标平台,并将需要的插件添加到Plug-in Project/Feature Project,whathaveyou....”

但是,AFAIK,没有简单的方法(例如,网站)来找出哪个功能包含哪个插件。例如,为了添加org.eclipse.ui.views.properties.tabbed,我需要知道这个插件包含在Eclipse Platform SDK 功能中(以及其他)。

到目前为止,我还没有找到一种简单的方法来找出哪个功能包含哪个插件。我通常从谷歌搜索插件名称开始,然后尝试在搜索结果中查找教程或类似内容,这可能会告诉我要包含哪些功能才能找到插件。当然,这可能很乏味。

所以我的问题是:有没有更好的,甚至是官方(或官方)的方式来快速简单地找到这些信息?

【问题讨论】:

    标签: eclipse plugins eclipse-rcp update-site target-platform


    【解决方案1】:

    如果您启动 p2 控制台,您可以使用 p2 查询语言来查找依赖于捆绑包的所有功能。我的例子是在 Eclipse Juno (4.2) 中:

    1. 在控制台视图中切换到 OSGi 控制台
    2. ss p2.console # 查找控制台捆绑号
    3. felix:start -t consoleBundleNumber

    现在您可以发出 p2 查询。要查找当前安装中的哪些功能包含 org.eclipse.jface,您可以使用:

    osgi> provlpquery this "select(parent | parent.properties['org.eclipse.equinox.p2.type.group'] == true && parent.requirements.exists(rc | everything.exists(iu | iu.id == 'org.eclipse.jface' && iu ~= rc)))" true
    org.eclipse.e4.rcp.feature.group 1.1.0.v20120521-2329-8yFTIGF3GGduEYqkQB9M3DKn
    org.eclipse.e4.tools.css.spy.feature.feature.group 0.12.0.v20111206-1509-17B-7w3123161302752
    

    要找出包含 org.eclipse.ui.views.properties.tabbed 的功能,您可以使用:

    osgi> provlquery http://download.eclipse.org/releases/juno "select(parent | parent.properties['org.eclipse.equinox.p2.type.group'] == true && parent.requirements.exists(rc | everything.exists(iu | iu.id == 'org.eclipse.ui.views.properties.tabbed' && iu ~= rc)))" true
    org.eclipse.amp.amf.feature.group 0.9.0.v20120528-0244
    org.eclipse.bpel.feature.feature.group 1.0.1.v20120606-0845-CI
    org.eclipse.jwt.feature.feature.group 1.2.0.v201205310546-7O7i-FK_Qj4QkVn3kW9q
    org.eclipse.platform.feature.group 4.2.0.v20120528-1648-9JF7BHV8FyMteji0MoOeOuU6sAnxIeYtKNM1dK
    org.eclipse.ptp.etfw.tau.feature.group 6.0.0.201206052145
    org.eclipse.tcf.te.feature.feature.group 1.0.0.201206051725
    org.eclipse.tcf.te.tcf.feature.feature.group 1.0.0.201206051725
    

    在这种情况下,org.eclipse.platform.feature.group是最正确的。

    第一个例子是在运行的 eclipse 中查询配置文件,所以它使用 provlpquery this。第二个示例是指定一个外部 p2 存储库,因此它使用 provlquery repo

    有关 p2 控制台的更多信息,请参阅http://wiki.eclipse.org/Equinox_p2_Console_Users_Guide。有很多黑魔法发生了:-)

    【讨论】:

    【解决方案2】:

    还有一个 GUI 实用程序可以回答这个问题,p2browser

    • 添加相关的 P2 存储库
    • 按 IU、功能或 (Java) 包过滤
    • 右键单击相关 IU 并选择“打开包括功能”

    该实用程序还可用于搜索提供特定 Java 包的插件/捆绑包。

    【讨论】:

      【解决方案3】:

      虽然开发了很多 RCP 应用程序,但我还没有找到一个方便的解决方案来解决这个问题。 Eclipse IDE 本身就是一个很好的插件来源。为了找出依赖关系,我发现 Plug-in Manifest Editor 中的 Dependency Analysis 功能非常有用。此外,您可以通过产品配置编辑器右上角的验证...按钮验证产品配置强>。如果缺少插件,则会将它们作为结果列出。

      到目前为止我还没有尝试过的一种可能性是通过指定一个或多个软件站点而不是依赖本地下载的功能和插件来定义一个目标平台

      这当然不是您要寻找的答案,但恕我直言,这个问题没有真正的解决方案。在构建 RCP 应用程序的目标平台时,只有一些工具和工具(上文已部分描述)有助于减轻痛苦。

      【讨论】:

        【解决方案4】:

        基本思路:获取所有特征的定义,然后搜索。

        更详细的说明: http://divby0.blogspot.com/2010/10/howto-find-feature-that-contains-plugin.html

        看起来不是一个有效的解决方案,但它仍然是一些东西。

        【讨论】:

          【解决方案5】:

          经过大量谷歌及以上答案后,我确实关注了

          1. 在 Eclipse 中创建新的通用项目
          2. 将 features 文件夹添加到此项目中(作为链接文件夹)
          3. 在这个项目中使用我的插件名称搜索所有 feature.xml

          我希望这对其他人也有帮助

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-07-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多