2017-11-29 3 views
0

Ich habe folgende Struktur:Verständnis gradle Abhängigkeiten

ProjectA -> hängt von ProjectB

ProjectB -> hängt von ProjectC

Kompilieren ProjectB alles funktioniert:


ProjectB /build.gradle:

dependencies { 
    compile project(':ProjectC') 
} 

ProjectB /settings.gradle:

include ':ProjectC' 
project(':ProjectC').projectDir = new File(settingsDir, '../ProjectC') 

jedoch ProjectA es kompilieren sagt es ProjectC nicht finden können


ProjectA /build.gradle:

dependencies { 
    compile project(':ProjectB') 
} 

ProjectA /settings.gradle:

include ':ProjectB' 
project(':ProjectB').projectDir = new File(settingsDir, '../ProjectB') 

Dies wird folgende Fehlermeldung an:

Where: Build file ProjectB\build.gradle

What went wrong:

A problem occurred evaluating project ':ProjectB'.

Project with path ':ProjectC' could not be found in project ':ProjectB'.


ich es nur mit Arbeit ProjectC machen kann in ProjectA. Aber das ist nicht was ich will.

Ich habe auch versucht auf ProjectA auszuschließen, aber nicht funktioniert hat

ProjectA /build.gradle:

dependencies { 
    compile (project (':ProjectB')) { 
    exclude module: ':ProjectC' 
    } 
} 

Aber zeigt gleichen Fehler.

Wie kann ich das beheben?

Antwort

1

Multi-Projekt-Builds sind nicht kaskadierbar. Sie können eine oder keine settings.gradle Datei in einem Multiprojekt-Build haben, aber nicht mehrere.

Außerdem funktioniert es nicht wie erwartet, es kann sogar verwirrender werden, wenn Sie Gradle aus verschiedenen Verzeichnissen aufrufen. Gradle schaut nach oben (und in die Verzeichnisse master), um den nächsten settings.gradle zu finden, wenn keiner angegeben ist. Dann wertet es die settings.gradle aus und überprüft, ob das Projekt, in dem sich Ihr Arbeitsverzeichnis befindet, Teil des in dieser settings.gradle-Datei definierten Multiprojekt-Builds ist. Wenn dies der Fall ist, wird es im Kontext des Multiprojekt-Builds ausgeführt, andernfalls wird es als eigenständiges Build ausgeführt.

Das heißt, wenn Sie Gradle von innen anrufen , haben Sie eine völlig andere Build, die wahrscheinlich auch anders konfiguriert ist, als wenn Sie Gradle von innen ProjectB aufrufen.

Wenn Sie mehrere Multiprojekt-Builds in einem Build erstellen möchten, sollten Sie stattdessen GradleBuild Tasks oder Composite-Builds verwenden. In beiden Fällen ist der Sub-Build vollständig unabhängig und kann selbst ein Multi-Projekt-Build sein. Welche zu verwenden ist, hängt vom genauen Anwendungsfall ab.

Verwandte Themen