如何在 Eclipse 下载站点上找出包含所需插件的功能

Posted

技术标签:

【中文标题】如何在 Eclipse 下载站点上找出包含所需插件的功能【英文标题】:How to find out which feature contains a needed plug-in on an Eclipse download site 【发布时间】: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 功能中(以及其他)。

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

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

【问题讨论】:

【参考方案1】:

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

    在控制台视图中切换到 OSGi 控制台 ss p2.console # 查找控制台捆绑号 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。有很多黑魔法发生了:-)

【讨论】:

有没有办法搜索功能?请参阅以下问题:***.com/questions/22152086/…【参考方案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】:

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

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

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

【讨论】:

以上是关于如何在 Eclipse 下载站点上找出包含所需插件的功能的主要内容,如果未能解决你的问题,请参考以下文章

下载 Eclipse 插件更新站点以进行离线安装

如何在无头服务器上构建 Eclipse 插件更新站点?

eclipse使用git下载项目

eclipse插件安装的四种方法

Eclipse插件安装方式及使用说明

eclipse中如何安装插件ADT及SDK工具