我的主机插件声明了对另一个插件的可选依赖项。在构建我的主机插件的片段时,Tycho 找不到可选的必需插件。这意味着我得到编译错误,因为来自可选依赖项的类无法解析。
如果我删除主机插件中的可选标志,Tycho 构建工作正常。我正在使用 Maven 3.0.4 和 Tycho 0.15.0。
我的主机插件声明了对另一个插件的可选依赖项。在构建我的主机插件的片段时,Tycho 找不到可选的必需插件。这意味着我得到编译错误,因为来自可选依赖项的类无法解析。
如果我删除主机插件中的可选标志,Tycho 构建工作正常。我正在使用 Maven 3.0.4 和 Tycho 0.15.0。
我不确定这是否真的是第谷中的一个错误,或者更确切地说是设计使然。
这是可观察行为的背景:Tycho 旨在以与 p2 在安装捆绑软件时相同的方式进行依赖解析。当您声明一个捆绑包的可选依赖项时,该捆绑包将不会被 p2 安装(除非某些其他捆绑包或功能对该捆绑包具有非可选依赖项)。所以遵循这条规则,Tycho 在依赖解析和类路径计算期间也不会考虑这个可选依赖。
但是,有一个偏离默认 p2 行为的开关(在target-platform-configuration
配置选项中dependency-resolution/optionalDependencies
):
require
,当前包的所有可选依赖项在编译时都被视为必需。由于这是您通常想要的,因此这是默认的.ignore
,在编译时忽略当前包的所有可选依赖项。请注意,这种特殊处理仅适用于当前包的可选依赖项,而不适用于依赖项链中的其他包。主机包当前被视为任何其他依赖项,我们可能会考虑在构建片段时对其进行特殊处理。
您有以下解决方法选项:
我找到了解决方法。我删除了主机插件中的可选插件,并通过清单编辑器将其添加到片段中。之后,我将其读入主机插件并再次将其声明为可选。(如果该插件已经在主机插件中声明,您无法通过 Manifest-Editor 的添加按钮在片段中看到它)但我认为这是第谷中的一个错误。片段中也必须提供可选的依赖项,就像在 Eclipse 中一样。