48 votes

Dépendances Maven avec Android Studio / Gradle

J'utilise le système de construction Gradle fourni avec Android Studio. Jusqu'à présent, je suis en mesure de construire des configurations multi-projets en utilisant les dépendances qui sont stockées dans ma structure de projet. Je voudrais maintenant utiliser une dépendance maven, en vain. J'ai écrit un fichier build.gradle très simple qui échoue toujours :

    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
        }
    }

avec le message suivant :

    * 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.

Cela se produit avec tous les artefacts que j'ai essayés jusqu'à présent. Une idée de ce qui ne va pas ?

Merci

0 votes

NOTE : vous pouvez obtenir la dernière version dans mvnrepository.com/artifact/com.h2database/h2

70voto

Peter Niederwieser Points 36369

Le bloc "repositories" dans la section buildscript ne s'applique qu'à l'environnement de construction. Vous devez également spécifier le dépôt à utiliser lors de la résolution des dépendances pour la construction de votre projet, vous devez donc mettre quelque chose comme ce qui suit dans votre fichier build.gradle :

repositories {
    mavenCentral()
}

Votre fichier complet ressemblerait à quelque chose comme ceci :

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
    }
}

Notez les deux occurrences de "repositories". Vous pouvez en savoir plus sur ce que cela signifie réellement dans la documentation de gradle .

0 votes

Pourriez-vous expliquer ce que vous voulez dire, car je ne suis pas sûr de ce que vous voulez dire ?

2 votes

Les gars, j'ai eu le même problème. La partie cruciale ici est la double déclaration des dépôts, l'un dans le buildscript, l'autre en dehors.

0 votes

@peter-niederwieser Cela vous dérangerait-il de jeter un coup d'oeil à cette question ?

12voto

Audrius K Points 422

Il semble que la version actuelle d'Android Studio ne détecte pas immédiatement les nouvelles dépendances. Essayez de redémarrer l'IDE.

Modifier : Ceci n'est pas nécessaire pour Android Studio >= 0.1.4v. Il a construit en action Sync Project with Gradle file . Vous pouvez le trouver sous Tools > Android > Sync Project with Gradle file ou simplement un bouton dans la barre d'outils.

0 votes

+1 pour cette information. Après avoir redémarré l'IDE, j'ai pu importer les classes référencées dans les dépendances.

0 votes

Cela m'a dérouté pendant des années car build.gradle dans mon projet était bien. Le redémarrage de l'IDE a réglé le problème. Merci

7voto

log1000 Points 185

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

Note : Ceci n'affecte que le code qui exécute la compilation, pas le projet. Le projet lui-même doit déclarer ses propres dépôts et dépendances. Ceci sera abordé plus tard.

Vous devez donc déclarer

  repositories {
     mavenCentral()
  }

dans la portée de votre projet une fois de plus.

4voto

mangu23 Points 697

Je l'ai fait de cette façon :

Dans Top build.gradle (Projet : YourProject) j'ai ajouté :

 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()
    }
}

NOTE : J'ai ajouté ceci en même temps que les dépôts prédéfinis de jcenter().

Puis, dans mon fichier app/build.gradle, j'ai ajouté la bibliothèque ou la dépendance dont j'avais besoin :

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

3voto

algrid Points 2141

J'ai récemment dû utiliser une dépendance de maven dans gradle, peut-être que ce petit exemple sera utile à quelqu'un.

Dans maven :

<dependency>
    <groupId>com.turo</groupId>
    <artifactId>pushy</artifactId>
    <version>0.12.1</version>
</dependency>

En classe, cela se transforme en :

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.turo:pushy:0.12.1'
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X