3

p2 有一种查询语言,允许对 p2 存储库的内容运行查询。然而,文档中的所有示例都假定查询语言是在 Java 中使用的,例如

IQuery<IInstallableUnit> q = QueryUtil.createMatchQuery("this.id == $0", id);
metadataRepository.query(q);

如何从命令行执行查询(无需编写自己的 Java 应用程序)?

4

2 回答 2

4

p2 director 应用程序可以选择列出或查询给定 p2 存储库的内容。你会得到-list所有的单位,-list Q:<p2 QL collection query>你可以查询一个子集。

该表达式需要是一个集合查询,因此您需要使用等价的集合查询,而不是上面给出的示例中的匹配查询。此外,$1必须将占位符 like 替换为实际值。

示例:org.eclipse.sdk.ide在 Juno 发布火车存储库中查找所有单元的命令行将是

eclipse -application org.eclipse.equinox.p2.director \
   -repository http://download.eclipse.org/releases/juno \
   -list 'Q:everything.select(x | x.id == "org.eclipse.sdk.ide")'

作为一个更有用的示例,您可以使用此命令查找在 p2 用户界面中以类别显示的所有单元(虽然我不会尝试大型存储库,但查询似乎很慢):

eclipse -application org.eclipse.equinox.p2.director \
   -repository <URL of some small repository> \
   -list 'Q:everything.select(y | everything.select(x | x.properties ~= filter("(org.eclipse.equinox.p2.type.category=true)")).collect(x | x.requirements).flatten().exists(r | y ~= r))'
于 2013-08-06T14:16:31.630 回答
0

Ian Bull 编写的p2diff工具非常值得一提。他的文章概述了 p2 API,并介绍了一些在使用 p2 API 时应理解的关键概念。

于 2014-03-31T08:19:42.590 回答