我负责基于 Eclipse 项目的基于 Maven/Tycho 的构建。该项目实际上由两个子项目Pa和Pb组成,每个子项目都是单独构建的。Pa 包含许多组合到 p2 存储库中的功能和插件。Pb 包含另一组功能以及一个产品,所有这些都取决于 Pa 的功能。
当我尝试从 Pb 中的功能以及 Pa 中的功能构建 Pb 产品时,问题就出现了。因此,我的产品文件包含以下功能:
<features>
<feature id="de.cau.cs.kieler.synccharts.feature" version="0.0.0"/>
<feature id="de.cau.cs.kieler.kaom.feature" version="0.0.0"/>
</features>
第一个特性来自项目 Pb,第二个特性来自 Pa,需要 Maven/Tycho 从 p2 存储库下载。通过我的父 pom.xml 中的以下定义,构建系统可以知道存储库:
<profiles>
<profile>
<id>juno42</id>
<properties>
<tycho-version>0.17.0</tycho-version>
<targetJdk>1.5</targetJdk>
</properties>
<repositories>
<repository>
<id>p2.pa</id>
<layout>p2</layout>
<url>repository_url_of_project_pa</url>
</repository>
</repositories>
</profile>
</profiles>
当我尝试构建 Pb 时(在之前构建了 Pa 并在上面定义的 URL 下发布了更新站点之后),我收到类似以下错误消息:
[ERROR] Software being installed: de.cau.cs.kieler.product 0.8.0.qualifier
[ERROR] Missing requirement: de.cau.cs.kieler.kaom.feature.feature.group 0.6.0.201304190326 requires 'de.cau.cs.kieler.core.model.gmf [0.2.2.201304190326]' but it could not be found
[ERROR] Cannot satisfy dependency: de.cau.cs.kieler.product 0.8.0.qualifier depends on: de.cau.cs.kieler.kaom.feature.feature.group 0.0.0
Maven/Tycho 显然已经从 Pa 中找到了要包含在最终产品中的功能,但未能找到该功能所包含的插件。我仔细检查了插件实际上是在 Pa 的 p2 存储库中发布的,并且所需的版本是否匹配。
有什么我看不到的吗?如果 Tycho 已经找到该功能,它不应该能够找到该功能所包含的插件吗?感谢您对解决此问题的任何帮助。:)
附带说明一下,在我们的项目中,Tycho 基于插件的 MANIFEST.MF 文件计算依赖关系,而不是基于 pom.xml 文件中定义的依赖关系。当我遇到第谷无法将两者混合在一个反应堆构建中的问题时,我检查了这一点。