Как решить круговую зависимость в 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? Я еще не готов избавиться от этого технического долга.

Ответы на вопрос(1)

Ваш ответ на вопрос