我有一个项目,其中 maven-enforcer 规则因使用非唯一快照(令人讨厌的是 Maven 3 中支持的唯一一种快照)的多模块构建而失败。
例如,假设 -> 是“依赖”关系,并且:
- 模块-A -> 模块-B -> 模块-C
- 模块-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”简介),因此仍然欢迎其他解决方案。