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-aeproduct-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.

questionAnswers(1)

yourAnswerToTheQuestion