So lösen Sie die zirkuläre Abhängigkeit in Gradle @ a

Ich migriere ein Java-Projekt von Ant nach Gradle. Ich denke, die beste Lösung besteht darin, die Unterstützung für mehrere Projekte von Gradle zu verwenden, aber ich kann keinen Weg finden, eine zirkuläre Abhängigkeit loszuwerden.

Das ursprüngliche Projekt wurde mit folgendem Layout eingerichtet:

- project/
  - common/
  - product-a/
  - product-b/

Die Beziehung zwischencommon, product-a, undproduct-b ist knifflig. Dascommon kommt drauf anproduct-a oderproduct-b, abhängig von einer Konfigurationsdatei. Gleichfalls,product-a undproduct-b darauf ankommencommon, unabhängig von der Konfigurationseigenschaft.product-a undproduct-b wird niemals gleichzeitig erstellt.

Ich dachte, eine schnelle Lösung wäre, so etwas in der @ zu verwendproject/build.gradle:

project(':product-a') {
    dependencies {
        compile project(':common')
    }
}

project(':product-b') {
    dependencies {
        compile project(':common')
    }
}

Nächste, ich dachte darüber nach, einen Weg zu finden, um der Arbeit für nur @ näher zu kommeproduct-a. Das hat mich dazu geführt:

project(':common') {
    dependencies {
        compile project(':product-a')
    }
}

Dies löst eine Ausnahme für eine zirkuläre Abhängigkeit aus.

Ich habe überlegt, umzugestaltenproduct-a undproduct-b durch Einrichten von Schnittstellen der Klassen, die von @ erwartet werdcommon undproduct-a/product-b oder indem ich Polymorphismus verwende, aber bevor ich mit einem von beiden weitermache, gibt es einen besseren Weg, dies mit Gradle zu erreichen? Ich bin noch nicht bereit, diese technischen Schulden loszuwerden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage