Dépendances de buildscript Gradle

176

Quelle est la différence entre la déclaration de référentiels dans la buildScriptsection de la construction gradle ou au niveau racine de la construction.

Option 1:

build.gradle :

buildScript {
    repositories {
        mavenCentral();
    }
}

ou

build.gradle :

repositories {
    mavenCentral();
}
Jeff Storey
la source

Réponses:

165

Les référentiels du bloc buildScript sont utilisés pour récupérer les dépendances de vos dépendances buildScript. Ce sont les dépendances placées sur le chemin de classe de votre build et auxquelles vous pouvez vous référer à partir de votre fichier de build. Par exemple, des plugins supplémentaires qui existent sur Internet.

Les référentiels au niveau racine sont utilisés pour récupérer les dépendances dont dépend votre projet. Donc toutes les dépendances dont vous avez besoin pour compiler votre projet.

Hiery Nomus
la source
19
Si j'ai besoin de maven central pour mon buildscript et mon projet, dois-je le déclarer deux fois?
Marcin Koziński
18
Oui, vous devez le spécifier deux fois alors en effet.
Hiery Nomus
À titre d'exemple, le plugin Spring propdeps peut être ajouté au buildscript pour activer les mots-clés "fournis" et "facultatifs" pour les dépendances en plus des mots-clés habituels "compile" et "testCompile". Remarque: le plugin war propose déjà le mot-clé "fourni", vous avez juste besoin de propdeps pour les projets jar qui seront déployés dans une guerre.
Powerlord
14

Je veux vous donner une conception claire. Pour cette raison, j'attache le code de l'instantané build.grade pour une meilleure compréhension.

dépendances buildscript:

buildscript {
    repositories {
        maven { url("https://plugins.gradle.org/m2/") }
    }

    dependencies {
        classpath 'net.saliman:gradle-cobertura-plugin:2.3.2'
        classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
    }
}

dépendances de niveau racine / noyau:

repositories{
    mavenLocal()
    maven { url("https://plugins.gradle.org/m2/") }
    maven { url "https://repo.spring.io/snapshot" }
}

dependencies {
        //Groovy
        compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.10'

        //Spock Test
        compile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.3'

        //Test
        testCompile group: 'junit', name: 'junit', version: '4.10'
        testCompile group: 'org.testng', name: 'testng', version: '6.8.5'
}

Donc, d'abord je veux clarifier en un seul mot

i) Le fichier jar des dépendances buildscript sera téléchargé à partir des référentiels buildscript. [Dépendance externe du projet]

ii) le fichier jar des dépendances de niveau racine sera téléchargé à partir des référentiels de niveau racine. [Pour la dépendance du projet]

Ici,

Le bloc «buildscript» ne contrôle que les dépendances pour le processus buildscript lui-même, pas pour le code de l'application. Comme divers plugins de gradle comme gradle-cobertura-plugin, gradle-lint-pluginsont trouvés à partir de dépôts de buildscript. Ces plugins ne seraient pas référencés en tant que dépendances pour le code d'application.

Mais pour la compilation de projets et les tests en cours d'exécution, des fichiers jar comme ceux- groovy all jar, junit and testng jarci seront trouvés dans les référentiels de niveau racine.

Et autre chose , la maven { url("https://plugins.gradle.org/m2/") }portion peut être utilisée dans les deux blocs. Parce qu'ils sont utilisés pour différentes dépendances.

Lien de ressource: différence entre les dépendances dans la fermeture et le noyau de buildscript

SkyWalker
la source
12

Le script de construction (ie build.gradle) peut avoir des dépendances pour l'exécution du script de construction lui-même. Vous engloberiez ces dépendances dans le bloc buildScript. Le chapitre 4 de Gradle Beyond the Basics le décrit en détail.

user3240644
la source