2011-01-14 10 views
0

injizieren Vielleicht fehlt mir etwas über die Art, wie Gradle funktioniert. Was ich hier habe, ist ein übergeordnetes Projekt, das nur die Konfiguration enthält, d. H. Es wird kein Artefakt gebaut, wenn es gebaut wird, es verwaltet lediglich alle Unterprojekte und baut sie auf.Gradle schlägt fehl, Abhängigkeiten in Teilprojekte mit fileTree

Nun werden die Teilprojekte teilen einige Abhängigkeits Konfiguration, so dass ich dachte, was ich im Stammprojekt build.gradle tun würde, ist:

subprojects { 
    dependencies { 
    compile fileTree(dir: 'lib', includes: ['*.jar']) 
    }  
} 

, die, nicht jedoch nicht funktioniert, versagt es mit einem eher obskuren Fehler Nachricht:

Ein Problem aufgetreten Auswertung root Projekts qype-android 'Ursache: Keine Signatur der Methode: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.compile() ist für Argumenttypen: (org.gradle.api.internal.file.DefaultConfigurableFileTree) Werte: [file set 'lib'] Mögliche Lösungen: Modul (java.lang.Object)

nach einige Versuch und Irrtum, ich könnte dieses Problem "beheben", indem Sie das "Java" -Plugin auf das Elternprojekt anwenden.

Wie kommt es? Ich sehe nirgends von der Gradle-Dokumentation, dass eine fileTree-Abhängigkeit das Java-Plugin benötigt. Trotzdem, warum sollte ich es für das Projekt brauchen, das die Konfiguration einbringt, im Gegensatz zu dem Projekt, das gerade konfiguriert wird (beachten Sie, dass alle Teilprojekte das Java-Plugin selbst anwenden)?

Dies bedeutet, dass, wenn ich N verschiedene Teilprojekte, die alle unterschiedlichen Naturen sind, und verschiedene Plugins gelten, dass die übergeordneten Projekte müssen immer den Satz von alle Plugins Wesen irgendwo selbst verwendet gelten, auch?

Antwort

2

Es ist nicht die fileTree, die 'Java' Plugin benötigt.

Die Fehlermeldung beschwert sich über undefined compile Abhängigkeitskonfiguration. Das Java-Plugin definiert diese Konfiguration für Sie, sodass Sie Abhängigkeiten (einschließlich Ihres Dateibaums) hinzufügen können.

+0

Ich sehe - danke. Allerdings finde ich es immer noch peinlich, dass ich das Java-Plugin auf das übergeordnete Projekt anwenden muss, wenn es kein Java-Projekt ist ... – Matthias

+1

Aber du musst kein Java-Plugin auf das Root-Projekt anwenden: move 'apply plugin: 'java'-Anweisung zum Abschnitt' Unterprojekt '. –

+0

das ist seltsam. Ich habe es nicht dort hingelegt, aber in jedem build.gradle eines Teilprojekts habe ich 'apply plugin: 'java' aufgerufen. Was ist der Unterschied, dies im Block "Teilprojekte" zu tun, verglichen mit der Ausführung in den Build-Dateien des Teilprojekts? – Matthias

Verwandte Themen