我们有一个PDE构建创建一个大的p2存储库。我们在PDE构建期间跳过p2 director来调用特定功能的p2.director(已经构建的子功能)。
问题是我们的一个插件有一个我们不想满足的可选依赖项,而应该满足所有其他可选依赖项。这可能吗?
答案 0 :(得分:3)
如果您使用更新版本的PDE无头构建(或者可能还有任何其他构建工具),所有可选的清单依赖项将被转换为可选的非贪婪的p2依赖项(即依赖项)当p2解析安装计划时会被忽略。)这里的背景是版本Juno M1,the p2 publishers were changed to generate optional, non-greedy p2 dependencies by default。
如果你确实想要一个可选的,贪婪的p2依赖项,你可以通过p2.inf用requires.<n>.greedy=true
更改贪婪,或者在MANIFEST.MF中添加x-installation
指令:
Import-Package: org.example;resolution:=optional;x-installation:=greedy
更一般地说,你应该避免可选的,贪婪的p2依赖。原因是它们可能会导致用户安装中出现令人惊讶的行为:如果最初不满足可选的贪婪依赖关系,并且用户碰巧使用包含依赖关系的p2存储库(例如,安装完全不相关的东西),贪婪的依赖项也将添加到安装中。因此,对于可选的,贪婪的依赖项,在将p2存储库添加到可用软件站点列表后,安装可能会“随机”更改。
因此,您应该将所有依赖项保留为可选,非贪婪,而是提供两个功能,其中包括您的插件:一个有一个,一个没有可选的依赖。通过这种方式,您可以完全控制用户是否要安装可选项。
答案 1 :(得分:1)
我终于通过在插件的META-INF /文件夹中创建p2.inf文件来告诉p2避免仅在此插件中查找optionnal依赖项。
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