2013-05-21 21 views
44

Ich benutze das Gradle-Build-System im Lieferumfang von Android Studio. Bisher bin ich in der Lage, Multi-Projekt-Setups mithilfe von Abhängigkeiten zu erstellen, die in meiner Projektstruktur gespeichert sind. Ich würde jetzt gerne eine Abhängigkeit von Maven benutzen, ohne Erfolg. Ich habe eine sehr einfache build.gradle Datei geschrieben, die immer fehlschlägt:Maven Abhängigkeiten mit Android Studio/Gradle

buildscript { 
     repositories { 
      maven { url 'http://repo1.maven.org/maven2' } 
     } 
     dependencies { 
      classpath 'com.android.tools.build:gradle:0.4' 
     } 
    } 
    apply plugin: 'android' 

    dependencies { 
     compile 'com.google.android:support-v4:r7' 
    } 

    android { 
     compileSdkVersion 17 
     buildToolsVersion "17.0.0" 

     defaultConfig { 
      minSdkVersion 7 
      targetSdkVersion 16 
     } 
    } 

mit der folgenden Meldung:

* What went wrong: 
     A problem occurred configuring project ':absabs'. 
     > Failed to notify project evaluation listener. 
      > Could not resolve all dependencies for configuration ':absabs:compile'. 
       > Could not find com.google.android:support-v4:r7. 
       Required by: 
        absabs:absabs:unspecified 
.... 
Caused by: org.gradle.api.internal.artifacts.ivyservice.ModuleVersionNotFoundException: Could not find com.google.android:support-v4:r7. 

kommt es vor, mit jedem Artefakt ich bisher ausprobiert habe. Irgendeine Idee von was ist falsch?

Dank

+0

http://mvnrepository.com/artifact/com.google.android/support-v4/r7 –

+0

HINWEIS: Sie können die neueste Version in http://mvnrepository.com/artifact/com.h2database/h2 bekommen – mangu23

Antwort

68

Der Block "repositories" im Buildscript-Abschnitt gilt nur für die Build-Umgebung. Sie müssen auch verwenden, das Repository angeben, wenn Abhängigkeiten für den Aufbau Ihres Projekts zu lösen, so müssen Sie so etwas wie die folgenden in Ihrer build.gradle Datei setzen:

repositories { 
    mavenCentral() 
} 

Ihre komplette Datei wie folgt aussehen würde:

buildscript { 
    repositories { 
     maven { url 'http://repo1.maven.org/maven2' } 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4' 
    } 
} 
apply plugin: 'android' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'com.google.android:support-v4:r7' 
} 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 
    } 
} 

Beachten Sie die beiden Instanzen von "Repositories". Sie können mehr darüber lesen, was das eigentlich bedeutet in the gradle docs.

+0

Können Sie das erklären, weil ich nicht sicher bin, was Sie meinen? – arinte

+0

@arinte ist das klarer? – ZoFreX

+0

@ZoFreX Ja, das war es. – arinte

12

Es scheint, dass aktuelle Android Studio Version neue Abhängigkeiten nicht sofort abholen. Versuchen Sie, IDE neu zu starten.

Bearbeiten: Dies ist nicht erforderlich für Android Studio> = 0.1.4v. Es hat in Aktion Sync Project with Gradle file gebaut. Sie finden es unter oder einfach nur in der Toolbar.

+0

+1 für diese Information. Nach dem Neustart der IDE konnte ich die Klassen importieren, auf die in Abhängigkeiten verwiesen wird. –

+0

Das hat mich schon lange verblüfft, da 'build.gradle' in meinem Projekt in Ordnung war. Neustart IDE sortiert es. Danke – samael

7

http://tools.android.com/tech-docs/new-build-system/user-guide

Hinweis: Dies betrifft nur den Code den Build ausgeführt wird, nicht das Projekt. Das Projekt selbst muss seine eigenen Repositorys und Abhängigkeiten deklarieren. Dies wird später behandelt.

So haben Sie

repositories { 
    mavenCentral() 
    } 

in Ihrem Projektumfang noch einmal zu erklären.

3

Ich tat es auf diese Weise:

In Top build.gradle (Projekt: IhrProjekt) Ich fügte hinzu:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.h2database:h2:1.4.187' 
     //NOTE: you can get the latest version in http://mvnrepository.com/artifact/com.h2database/h2 

     } 
} 

allprojects { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
} 

HINWEIS: Ich habe diese zusammen mit dem vordefinierten jcenter() Repositories.

Und dann für meine app/build.gradle Datei hinzugefügt ich je nachdem, welche Bibliothek oder -abhängigkeit ich brauchte auf:

dependencies { 
....//Add dependency here 
} 
0

Maven Maven setzt XML als Format-Spezifikation schreiben zu bauen. Die Struktur ist jedoch diametral unterschiedlich. Maven hat seine eigenen Probleme. Abhängigkeiten Management behandelt nicht gut Konflikte zwischen verschiedenen Versionen der gleichen Bibliothek (etwas Ivy ist viel besser).XML als Build-Konfigurationsformat ist streng strukturiert und hoch standardisiert. Die Anpassung der Ziele (Ziele) ist schwierig. Da sich Maven hauptsächlich auf das Dependency Management konzentriert, sind komplexe, angepasste Build-Skripte in Maven schwieriger zu schreiben als in Gradel.