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

491   1  

1 ответ:

Удаление циклической зависимости не может быть разрешено с помощью хитрости сборки. Вам придется рефакторировать свои модули, чтобы больше не было циклической зависимости. Из ваших названий модулей и без какой-либо другой информации, я думаю, вы захотите извлечь часть "common", которая зависит от "product -*", и поместить ее в новый модуль.

Comments

    Ничего не найдено.