【问题标题】:Tycho resolves the wrong version of my own manifest-first artifactsTycho 解决了我自己的清单优先工件的错误版本
【发布时间】:2012-09-03 05:11:11
【问题描述】:

考虑以下场景:我的应用程序有一些依赖于我自己的 POM 优先工件(使用纯 Maven 构建)和一些依赖于我自己的清单优先工件(使用 Tycho 构建)。对于 POM-first 工件,Tycho 准确解析了我在 POM 中指定的版本。对于 manifest-first 工件,Tycho 解析可能具有更高版本的本地构建单元。

在我的具体情况下,我在 pom.xml 中指定了对版本 1.2.0 中清单优先工件的依赖关系,但我收到警告“以下本地构建的单元已用于解决项目依赖关系”版本 1.3 .0.2012xxx.

我已经发现了以下错误和讨论,但我不明白为什么 Tycho 解决 POM-first 和 manifest-first 依赖项存在差异。

【问题讨论】:

  • 感谢您的快速回复以及您对 stackoverflow 的简短介绍 ;-) 正如您所认识到的,我也在邮件列表上发布了这个问题,但由于三天后它没有出现,我决定发布它在这里。

标签: maven tycho


【解决方案1】:

依赖解决在 Tycho 中分为两步:

  • 首先,第谷计算所谓的target platform,即 被考虑用于依赖解析的工件集。 在这一步中,Tycho 根据 Maven 规则并将结果添加到目标平台。还有,所有 添加了您使用 mvn install 在本地构建的第谷工件 到目标平台。

  • 然后,Tycho 解决您项目的依赖项(从 MANIFEST.MF、feature.xml 等)根据 OSGi 规则。不像 在 Maven 依赖项中,OSGi 依赖项通常指定为 版本范围。所以如果你写

    Require-Bundle: my.bundle;bundle-version="1.2.0"  
    

    您是说您想要 1.2.0 或更高版本。您通常不想在此处指定确切的版本,因为这会对运行时产生影响。但是您确实想控制构建时发生的事情,这就是为什么有多种方法可以控制目标平台的内容。

在您的特定情况下,您在 POM 中指定的版本的目标平台中拥有 POM 优先工件。然后,您似乎还为您的 Tycho 工件指定了 POM 依赖项(这并不常见,但没关系),因此您将在目标平台中在指定版本中拥有 Tycho 工件。但是,由于您还使用mvn install 在本地构建了一个较新版本的 Tycho 工件,这些也将在目标平台中。因此,依赖关系解析(第 2 步)可以在两个版本之间进行选择,通常会选择较新的版本。

为防止将本地构建的工件添加到目标平台,您可以删除文件~/.m2/repository/.meta/p2-local-metadata.properties。 (我假设您已经知道这一点,但只是为了确定。Bug 355367 还将在 0.16.0 中带来一个替代的、更方便的选项。)

现在我终于解决了你的问题,为什么 POM 优先工件与第谷工件的行为不同:

  • 假设多个第谷工件在同一个反应器中一起构建。然后每个工件都可以使用其他工件作为依赖项,而无需任何特定的目标平台配置,例如您不需要 POM 依赖于同一反应器中的工件。 (或者换句话说:来自同一反应器的上游工件自动成为模块目标平台的一部分。)因此,为了支持第谷反应器部分的重建(在完整反应器的mvn install 之后),本地安装Tycho 工件需要添加到每个模块的目标平台。第谷不知道它们最初是否属于同一个反应堆,所以它只是将它们全部添加。

  • 对于 POM 优先的工件,对工件的引用始终存在(通过 Maven 配置继承),即使只构建了 Tycho 反应器的一部分。因此,不需要任何机制来获取本地构建的 POM 优先工件的任何版本,但 Tycho 可以将精确指定的版本添加到目标平台。

【讨论】:

    【解决方案2】:

    对于那些有兴趣在解析目标平台时强制 tycho 忽略本地工件的用户,请添加 CLI tycho.localArtifacts=ignore,例如

    mvn clean install -Dtycho.localArtifacts=ignore
    

    更多详情请关注Tycho-Target Eclipse Wiki

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      相关资源
      最近更新 更多