Como resolver dependência circular em Gradle
Estou migrando um projeto Java do Ant para o Gradle. Acho que a melhor solução é usar o suporte a vários projetos de Gradle, mas não consigo encontrar uma maneira de me livrar de uma dependência circular.
O projeto original foi configurado para ter este layout:
- project/
- common/
- product-a/
- product-b/
O relacionamento entrecommon
, product-a
eproduct-b
é complicado. ocommon
depende deproduct-a
ouproduct-b
, dependendo de um arquivo de configuração. Da mesma forma,product-a
eproduct-b
dependercommon
, independentemente da propriedade de configuração.product-a
eproduct-b
nunca será construído ao mesmo tempo.
Eu pensei que uma solução rápida seria usar algo assim noproject/build.gradle
:
project(':product-a') {
dependencies {
compile project(':common')
}
}
project(':product-b') {
dependencies {
compile project(':common')
}
}
Em seguida, pensei em conseguir uma maneira de aproximar isso de trabalhar apenas porproduct-a
. Isso me levou a isso:
project(':common') {
dependencies {
compile project(':product-a')
}
}
Isso lançará uma exceção por ter uma dependência circular.
Eu considerei refatorarproduct-a
eproduct-b
configurando interfaces das classes esperadas porcommon
eproduct-a
/product-b
ou usando polimorfismo, mas antes de avançar com qualquer um desses, existe uma maneira melhor de fazer isso com Gradle? Ainda não estou pronto para me livrar dessa dívida técnica.