4

我有一个项目,其中 maven-enforcer 规则因使用非唯一快照(令人讨厌的是 Maven 3 中支持的唯一一种快照)的多模块构建而失败。

例如,假设 -> 是“依赖”关系,并且:

  1. 模块-A -> 模块-B -> 模块-C
  2. 模块-A -> 模块-C

并且模块 B 和模块 C 作为唯一构建存在于快照存储库中。POM 中所有声明的模块版本当前都是 1.0-SNAPSHOT。

现在,构建模块 A 失败:

mvn -pl Module-A install

结果是:

[INFO] --- maven-enforcer-plugin:1.0.1:enforce (enforce) @ Module-A ---
[ERROR] 
Dependency convergence error for com.vivosys.project:Module-C:1.0-SNAPSHOT paths to dependency are:
+-com.vivosys.project:Module-A:1.0-SNAPSHOT
  +-com.vivosys.project:Module-B:1.0-20111228.032527-8
    +-com.vivosys.project:Module-C:1.0-SNAPSHOT
and
+-com.vivosys.project:Module-A:1.0-SNAPSHOT
  +-com.vivosys.project:Module-C:1.0-20111228.032527-6

传递依赖被解析为非唯一快照构建,但直接依赖被解析为唯一快照构建。

我正在使用 maven 3.0.3,maven-enforcer 1.0.1。存储库是使用唯一快照选项的 Artifactory 2.4.2(Artifactory 建议,因为 Maven 3 不再支持非唯一快照)。

解决方案?

更新:看起来工件允许覆盖 Maven 客户端行为并将非唯一快照存储在存储库中。但是,由于某种原因,Artifactory 不推荐这样做(请参阅http://wiki.jfrog.org/confluence/display/RTF/Local+Repositories上的“Maven 3”简介),因此仍然欢迎其他解决方案。

4

3 回答 3

4

此错误已被修复 ( MENFORCER-118 ) 并在 1.1 版中发布

于 2012-06-15T08:42:43.767 回答
2

您遇到了这个执行器插件错误(作为增强提出)。

也许,严格来说,作为一种解决方法,您可以将传递依赖项 C 显式声明为 A 的依赖项?

于 2011-12-29T07:09:08.620 回答
1

在解决MENFORCER-118之前,唯一可用的解决方案似乎是将存储库服务器配置为使用非唯一快照。在 Artifactory 中,这可以通过以下方式完成:Admin, Repositories,选择快照存储库并选择Edit. 然后Nonunique在 下选择Maven Snapshot Version Behavior

于 2012-01-28T21:04:51.887 回答