【问题标题】:How to stop the p2 director from resolving optional dependencies for one of our plugins?如何阻止 p2 导演解决我们插件之一的可选依赖项?
【发布时间】:2013-04-08 22:29:01
【问题描述】:

我们有一个 PDE 构建,创建了一个大型 p2 存储库。我们在 PDE 构建期间跳过 p2 导向器,以在特定功能(已构建的子功能)上调用 p2.director。

问题是我们的一个插件有一个我们不想满足的可选依赖项,而所有其他可选依赖项都应该得到满足。这可能吗?

【问题讨论】:

    标签: eclipse p2 pde


    【解决方案1】:

    如果您使用更新版本的 PDE 无头构建(或可能还有任何其他构建工具),所有可选的清单依赖项都将转换为可选的非贪婪 p2 依赖项(即依赖项当 p2 解析安装计划时会被忽略。)这里的背景是在 Juno M1 版本中,the p2 publishers were changed to generate optional, non-greedy p2 dependencies by default

    如果您确实想要一个可选的、贪婪的 p2 依赖项,您可以通过带有requires.<n>.greedy=true 的 p2.inf 更改贪婪,或者在 MANIFEST.MF 中添加 x-installation 指令:

    Import-Package: org.example;resolution:=optional;x-installation:=greedy
    

    一般来说,您应该避免可选的、贪婪的 p2 依赖项。原因是它们可能会在您的用户安装中导致令人惊讶的行为:如果最初不满足可选的贪婪依赖项,并且用户碰巧使用包含依赖项的 p2 存储库(例如,安装完全不相关的东西),则贪婪的依赖也将被添加到安装中。因此,对于可选的贪婪依赖项,在将 p2 存储库添加到可用软件站点列表后,安装可能会“随机”更改。

    因此,您应该将所有依赖项保留为可选的、非贪婪的,而是提供两个包含您的插件的功能:一个包含可选依赖项,另一个不包含可选依赖项。这样,您的用户就可以完全控制他们是否要安装可选的东西。

    【讨论】:

      【解决方案2】:

      我终于设法通过在插件的 META-INF/ 文件夹中创建一个 p2.inf 文件来告诉 p2 避免仅在此插件中查找可选依赖​​项。

      p2.inf 只是告诉可选的导入包是非贪婪的,这意味着它不会尝试解决这种依赖关系。

      这是一个例子:

      requires.0.namespace=java.package
      requires.0.name=com.lowagie.text
      requires.0.greedy=false
      requires.0.optional=true
      requires.1.namespace=java.package
      requires.1.name=com.lowagie.text.exceptions
      requires.1.greedy=false
      requires.1.optional=true
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-29
        • 2016-11-01
        • 1970-01-01
        • 2014-09-10
        • 2020-03-04
        • 2016-08-15
        • 1970-01-01
        • 2020-12-27
        相关资源
        最近更新 更多