【问题标题】:Command line to find units in a p2 repository using p2 query language使用 p2 查询语言在 p2 存储库中查找单元的命令行
【发布时间】:2013-08-07 14:37:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: eclipse p2 update-site


    【解决方案1】:

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

    表达式需要是集合查询,因此您需要使用等价的集合查询,而不是上面给出的示例中的匹配查询。此外,$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))'
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-01-26
        • 1970-01-01
        • 2019-06-09
        • 2011-02-24
        • 2016-05-22
        • 2017-10-09
        • 1970-01-01
        • 1970-01-01
        • 2020-12-06
        相关资源
        最近更新 更多