为什么 Gradle 5 (5.6.3) 在组件解析时做出了意想不到的决定?

Why Gradle 5 (5.6.3) made an unexpected decision during component resolution?

我有一个非常大的多项目 java 构建。更新到Gradle 5(4.10.3->5.6.3)后,最可怕的事情之一就是在依赖解析过程中意外失败:

...
dependencies {
// I know about the deprecation of 'compile', with 'implementation' I have the same problems
    compile project(":Monitor")
    compile project(":WFPlugins-Server")
    compile project(":web-spring")
    compile project(":Security")
    compile project(":Client")
}
...

对我来说很清楚,它应该是一个项目依赖项。但我收到:

FAILURE: Build failed with an exception.



* What went wrong:

Execution failed for task ':SpringWFS:compileJava'.

> Could not resolve all files for configuration ':SpringWFS:compileClasspath'.
   > Could not find com.company:WFPlugins-Server:1.12.

     Required by:
         project :SpringWFS

所以 gradle 正试图将其解决为 ExternalModuleDependency [根据 gradle] 而不是 DefaultProjectDependency 并且构建如预期的那样失败了

有人解决这个问题吗?

备注:

  1. 请不要提出复合构建(目前不可能,但我正在努力)
  2. 更改构建系统(我们有一个非常大的项目):)

Gradle 将项目依赖替换为模块依赖的唯一原因是:

  • 如果定义了替换规则。看看你有没有定义。
  • 如果您在构建的其他地方将 WFPlugins-Server 作为二进制依赖项引用,并且它显示为 SpringWFS 依赖关系图的一部分, 它具有比项目更高的版本。

在最后一种情况下,您可以调整解析策略 to prefer project over modules