Почему Gradle 5 (5.6.3) принял неожиданное решение при разрешении компонентов?
У меня очень большая сборка 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 [с точки зрения градиента] вместо DefaultProjectDependency, и сборка не выполняется, как ожидалось
Кто-нибудь решает эту проблему?
примечания:
- Пожалуйста, не предлагайте составные сборки (в данный момент это невозможно, но я над этим работаю)
- Измените систему сборки (у нас действительно большой проект):)
1 ответ
Решение
Единственные причины, по которым Gradle заменит зависимость проекта зависимостью модуля:
- если определено правило замены. Проверьте, есть ли у вас определенные.
- если вы ссылаетесь
WFPlugins-Server
где-нибудь в вашей сборке как бинарная зависимость, и она появляется как частьSpringWFS
граф зависимостей, и он имеет более высокую версию, чем проект.
В последнем случае вы можете настроить стратегию разрешения, чтобы предпочесть проект модулям.