使用p2查询语言在p2存储库中查找单元的命令行

时间:2013-08-06 14:16:32

标签: eclipse p2 update-site

p2有query language,允许对p2存储库的内容运行查询。但是documentation中的所有示例都假定查询语言是在Java中使用的,例如

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

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

2 个答案:

答案 0 :(得分:3)

p2 director application可以选择列出或查询给定p2存储库的内容。使用-list,您将获得所有单元,使用-list Q:<p2 QL collection query>,您可以查询子集。

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

示例:在Juno版本系列存储库中查找所有org.eclipse.sdk.ide单元的命令行将是

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))'

答案 1 :(得分:0)

Ian Bull编写的

p2diff工具非常值得一提。他的article提供了p2 API的概述,并介绍了与p2 API一起使用时应该理解的一些关键概念。