Как решить круговую зависимость в Gradle
Я перевожу Java-проект из Ant в Gradle. Я думаю, что лучшее решение - это использовать многопроектную поддержку Gradle, но я не могу найти способ избавиться от циклической зависимости.
Первоначальный проект был настроен так:
- project/
- common/
- product-a/
- product-b/
Отношение междуcommon
, product-a
, а такжеproduct-b
это сложно.common
зависит отproduct-a
или жеproduct-b
в зависимости от файла конфигурации. Точно так же,product-a
а такжеproduct-b
зависит отcommon
независимо от свойства конфигурации.product-a
а такжеproduct-b
никогда не будет построен в то же время.
Я думал, что быстрое решение будет использовать что-то подобное вproject/build.gradle
:
project(':product-a') {
dependencies {
compile project(':common')
}
}
project(':product-b') {
dependencies {
compile project(':common')
}
}
Затем я подумал о том, чтобы найти способ приблизить это к работе только дляproduct-a
, Это привело меня к этому:
project(':common') {
dependencies {
compile project(':product-a')
}
}
Это вызовет исключение для наличия циклической зависимости.
Я рассмотрел рефакторингproduct-a
а такжеproduct-b
путем настройки интерфейсов классов, ожидаемыхcommon
а такжеproduct-a
/product-b
или используя полиморфизм, но перед тем, как перейти к одному из них, есть ли лучший способ сделать это с помощью Gradle? Я еще не готов избавиться от этого технического долга.