片段中没有主机的可选依赖项

时间:2012-10-01 08:48:16

标签: tycho

我的主机插件声明了对另一个插件的可选依赖项。在为我的主机插件构建片段时,Tycho无法找到可选的插件。这意味着我得到编译错误,因为无法解析可选依赖项中的类。

如果我删除主机插件中的可选标志,Tycho构建工作正常。我正在使用Maven 3.0.4和Tycho 0.15.0。

2 个答案:

答案 0 :(得分:5)

如果这确实是第谷的一个错误,或者更确切地说是设计错误,我还未决定。

这是可观察行为的背景:Tycho旨在以与安装捆绑时p2相同的方式执行其依赖项解析。当您向bundle声明可选依赖项时,p2将不会安装该bundle(除非某些其他bundle或feature对该bundle具有非可选依赖项)。因此,遵循此规则,Tycho也不会在依赖项解析和类路径计算期间考虑此可选依赖项。

但是,有一个偏离默认p2行为的开关(在target-platform-configuration配置选项dependency-resolution/optionalDependencies中):

  • 使用值require,在编译时将当前包的所有可选依赖项视为必需。由于这是您通常想要的,这是默认
  • 使用值ignore,在编译时忽略当前包的所有可选依赖项。

请注意,此特殊处理仅适用于当前捆绑包的可选依赖项,而不适用于依赖关系链中的其他捆绑包。主机包当前被视为任何其他依赖项,我们可能会考虑在构建片段时特别对它们进行处理。

对于解决方法,您有以下选项:

  • 还在片段的清单中添加可选的依赖项。最简单的方法是使用文本编辑器。严格来说,这是正确的做法:片段确实应该声明自己的依赖关系,而不是依赖其他地方的声明。但由于PDE不要求你这样做,所以Tycho应该是否值得怀疑。
  • 通过jars.extra.classpath option in the build.properties
  • 在片段中添加显式的仅编译时依赖项

答案 1 :(得分:-1)

我找到了解决方法。我删除了主机插件中的可选插件,并通过Manifest-Editor将其添加到片段中。之后,我将其读入主机插件并再次声明为可选。 (如果插件已在主机插件中声明,则无法通过Manifest-Editor的add-Button在片段中看到它) 但我认为这是tycho中的一个错误。片段中也可以使用可选的依赖项,就像在eclipse中一样。