2016-06-14 3 views
8

Ich verwende Gradle 2.12 (oder neuer) mit einer geeigneten Version des Android Gradle Plugins in meinem Projekt. Gradle 2.12 führte die compileOnly Konfiguration ein, warum bekomme ich einen Fehler, wenn ich versuche, es zu verwenden?Verwendung des Bereichs 'compileOnly' in Android-Projekten?

nicht Methode compileOnly() für Argumente

Antwort

3

Einfache Verwendung provided statt compileOnly

Siehe https://github.com/google/auto/issues/324#issuecomment-212333044

+0

Das erfordert ein zusätzliches "apt-plugin" gemäß dem von Ihnen angegebenen Link. – Alix

+0

Also, was ist das Problem, ein neues Plugin hinzuzufügen, wenn es erforderlich ist? compileOnly ist eine Funktion exklusiv für das Java-Plugin und das Android-Plugin hat nicht die gleichen Funktionen. –

+0

Wie hast du dein Problem so gelöst? –

10

Beachten Sie den folgenden Satz aus den Gradle 2.12 Release Notes zur neuen compileOnly configuration (Hervorhebung von mir) finden konnte:

Sie jetzt erklären können Abhängigkeiten nur zur Kompilierzeit in Verbindung mit dem Java-Plugin verwendet werden.

Also das Java Gradle Plugin ist eine Komponente, die wir bei der Beantwortung dieser Frage berücksichtigen müssen. Wir können die compileOnly Konfiguration finden, die im Java Gradle Plugin source code für neue genug Versionen erklärt wird.

Allerdings, die Android Gradle Plugins nicht direkt erweitern das Java Gradle Plugin. In der Tat, ich glaube, dass die Android-Plugins eine Art "frankenplugin" darstellen, mit einigen Funktionen geliehen aber nicht geerbt aus dem Java-Plugin. Die folgenden Teile des Quellcodes unterstützen diese Idee.

Von the base Android plugin class:

project.apply plugin: JavaBasePlugin 

Die Android Gradle Plugins daher Funktionalität aus dem base Java Gradle plugin, integrieren nicht vom full Java Gradle plugin. Darüber hinaus gibt es an explicit check, dass die volle Java Gradle Plugin nicht neben einer Android Gradle Plugin angewandt wird:

// get current plugins and look for the default Java plugin. 
if (project.plugins.hasPlugin(JavaPlugin.class)) { 
    throw new BadPluginException(
      "The 'java' plugin has been applied, but it is not compatible with the Android plugins.") 
} 

Auf der Grundlage dieser Informationen, meine Vermutung ist, dass compileOnly gerade nicht manuell aus der Java Gradle Plugin die portierten Android Gradle-Plugin noch nicht. Es wird wahrscheinlich nicht erscheinen, bevor wir ein Android Gradle-Plugin mit mindestens Gradle-Version auf 2,12 oder höher haben.

+0

News: das Android Gradle Plugin 2.1.3 erfordert Gradle 2.14.1. Kann jemand bestätigen, dass diese Version die Funktion unterstützt? – Alix

+0

Ab 2.2.2 ist es immer noch nicht – Auras