我有一个项目,其中maven-enforcer规则失败,使用非唯一快照进行多模块构建(这是令人讨厌的Maven 3中唯一支持的快照类型)。
例如,假设 - >是一种“依赖”关系,并且:
并且模块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不再支持非唯一快照)。
解决方案?
更新:看起来像artifactory允许覆盖maven客户端行为并将非唯一快照存储在存储库中。但是,出于某种原因,Artifactory不建议这样做(请参阅http://wiki.jfrog.org/confluence/display/RTF/Local+Repositories处的“Maven 3”模糊),所以其他解决方案仍然受欢迎。
答案 0 :(得分:4)
此错误已在1.1版中修复(MENFORCER-118)和released。
答案 1 :(得分:2)
您已点击this enforcer插件错误(提升为增强版)。
或许,严格地说,作为一种解决方法,您可以将传递依赖关系C显式声明为A的依赖关系吗?
答案 2 :(得分:1)
解决MENFORCER-118之前唯一可用的解决方案似乎是将存储库服务器配置为使用非唯一快照。在Artifactory中,可以通过以下方式完成:Admin, Repositories
,选择快照存储库并选择Edit
。然后在Nonunique
下选择Maven Snapshot Version Behavior
。