28

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

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

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

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

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

4

5 回答 5

24

如果您启动 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。有很多黑魔法在发生:-)

于 2012-06-13T12:13:12.417 回答
4

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

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

该实用程序对于搜索提供特定 Java 包的插件/包也很有用。

于 2015-04-07T12:35:49.493 回答
2

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

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

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

于 2012-04-12T13:46:10.867 回答
1

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

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

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

于 2012-04-26T23:57:21.400 回答
1

好的,经过很多谷歌和以上的回答,我做了以下

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

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

于 2017-04-12T04:51:29.877 回答