2

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

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

4

2 回答 2

5

我不确定这是否真的是第谷中的一个错误,或者更确切地说是设计使然。

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

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

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

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

您有以下解决方法选项:

  • 还要在片段的清单中添加可选依赖项。最简单的方法是使用文本编辑器。严格来说,这是正确的做法:片段确实应该声明自己的依赖关系,而不是依赖其他地方的声明。但是由于 PDE 不要求您这样做,因此第谷是否应该这样做是值得怀疑的。
  • 通过build.properties 中的 jars.extra.classpath 选项在片段中添加显式的仅编译时依赖项。
于 2012-10-01T14:26:48.657 回答
-1

我找到了解决方法。我删除了主机插件中的可选插件,并通过清单编辑器将其添加到片段中。之后,我将其读入主机插件并再次将其声明为可选。(如果该插件已经在主机插件中声明,您无法通过 Manifest-Editor 的添加按钮在片段中看到它)但我认为这是第谷中的一个错误。片段中也必须提供可选的依赖项,就像在 Eclipse 中一样。

于 2012-10-01T09:10:46.933 回答