web-dev-qa-db-fra.com

Comment / quand générer des fichiers wrapper Gradle?

J'essaie de comprendre comment fonctionne le Gradle Wrapper. Dans de nombreux dépôts source, je vois la structure suivante:

projectRoot/
    src/
    build.gradle
    gradle.properties
    settings.gradle
    gradlew
    gradlew.bat
    gradle/
        wrapper/
            gradle-wrapper.jar
            gradle-wrapper.properties

Mes questions:

  1. Comment/quand génère-t-on gradlew/gradlew.bat? Êtes-vous censé les générer une seule fois lorsque le projet est créé, les générez-vous chaque fois que vous validez/modifiez des modifications? Et comment sont-ils générés?
  2. Même question ci-dessus, mais pour les fichiers gradle/wrapper/* (gradle-wrapper.jar et gradle-wrapper.properties)?
  3. Parfois, je vois d'autres fichiers *.gradle dans le répertoire gradle du projet. Quels sont ces fichiers Gradle supplémentaires et que représentent-ils/font-ils? Plugins personnalisés?
  4. Quelle est la différence entre les propriétés qui entrent dans settings.gradle par rapport à ce qui devrait être défini à l'intérieur de gradle.properties?
200
smeeb
  1. Vous le générez une fois, puis à nouveau lorsque vous souhaitez modifier la version de Gradle que vous utilisez dans le projet. Il n'y a pas besoin de générer est si souvent. Ici sont les documents. Ajoutez simplement la tâche wrapper au fichier build.gradle et exécutez cette tâche pour obtenir la structure du wrapper.

    Notez que vous devez avoir Gradle installé pour générer un wrapper. Un excellent outil pour gérer les artefacts de g-écosystème est SDKMAN! . Pour générer un wrapper de niveaux, ajoutez le code suivant au fichier build.gradle:

    task wrapper(type: Wrapper) {
       gradleVersion = '2.0' //version required
    }
    

    et courir:

    gradle wrapper
    

    tâche. Ajoutez les fichiers obtenus à SCM (par exemple, git) et désormais, tous les développeurs disposeront de la même version de Gradle lors de l’utilisation de Gradle Wrapper.

    Avec Gradle 2.4 (ou supérieur), vous pouvez configurer un wrapper sans ajouter de tâche dédiée:

    gradle wrapper --gradle-version 2.3
    

    ou

    gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.Zip
    

    Tous les détails peuvent être trouvés ici

De Gradle 3.1--distribution-type option peut également être utilisé. Les options sont binaires et all et bin . all contient en plus du code source et de la documentation. all est également meilleur lorsque IDE est utilisé, et que l'éditeur fonctionne mieux. L'inconvénient est que la construction peut durer plus longtemps (nécessité de télécharger plus de données, inutile sur le serveur CI) et cela prendra plus d'espace.

  1. Ce sont des fichiers Gradle Wrapper. Vous devez les générer une fois (pour une version particulière) et les ajouter au contrôle de version. Si vous devez changer la version de Gradle Wrapper, changez la version dans build.gradle see (1.) et régénérez les fichiers.

  2. Donnez un exemple détaillé. Ce fichier peut avoir plusieurs objectifs: projet multi-module, séparation des responsabilités, script légèrement modifié, etc.

  3. settings.gradle est plutôt responsable de la structure du projet (modules, noms, etc.), tandis que gradle.properties est utilisé pour les détails externes du projet et de Gradle (version). , arguments de ligne de commande -XX, propriétés, etc.)

230
Opal

Génération de la Gradle Wrapper

Projet de construction

// Top-level build file where you can add configuration options common to all sub-projects/modules.

// Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain.
task wrapper(type: Wrapper) {
    gradleVersion = '2.2' 
}

// Look Google doesn't use Maven Central, they use jcenter now.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:1.0.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Puis à la ligne de commande

gradle wrapper

Si vous manquez Gradle sur votre système, installez-le ou ce qui précède ne fonctionnera pas. Sur un Mac, il est préférable d’installer via Homebrew.

brew install gradle

Une fois que vous avez exécuté la tâche d'encapsuleur et généré gradlew, n'utilisez pas votre dégradé système. Cela vous évitera beaucoup de maux de tête.

./gradlew assemble

Qu'en est-il du plugin Gradle vu ci-dessus?

com.Android.tools.build:gradle:1.0.1

Vous devez définir la version la plus récente et vous pouvez consulter la page des outils et modifier la version en conséquence.

Voir ce que Android Studio génère

L'ajout de gradle et du dernier Android Studio a considérablement modifié la disposition du projet. Si vous avez un projet plus ancien, je vous recommande vivement de créer un projet propre avec le dernier Android Studio et de voir ce que Google considère comme le projet standard.

Android Studio dispose de fonctionnalités pour importer des projets plus anciens qui peuvent également aider.

26

À partir de Gradle 2.4, vous pouvez utiliser gradle wrapper --gradle-version X.X pour configurer une version spécifique de l'encapsuleur Gradle, sans ajouter de tâches à votre fichier build.gradle. La prochaine fois que vous utiliserez l'encapsuleur, il téléchargera la distribution Gradle appropriée.

16
Craig Trader

Si vous souhaitez télécharger gradle avec source et docs, l'URL de distribution par défaut configurée dans gradle-wrapper.properites ne répondra pas à vos besoins. C'est https://services.gradle.org/distributions/gradle-2.10-bin. Zip , not https://services.gradle.org/distributions/gradle-2.10-all.Zip . Cette URL complète est suggérée par IDE, telle que Android. _ Studio.Si vous souhaitez télécharger la version complète, vous pouvez configurer la tâche d'emballage comme ceci:

task wrapper(type: Wrapper) {
    gradleVersion = '2.13'
    distributionUrl = distributionUrl.replace("bin", "all")
}
8
Geng Jiawen

Il s'agit de la commande à utiliser pour indiquer à Gradle de mettre à niveau le wrapper de telle sorte qu'il récupère les versions de distribution des bibliothèques qui incluent le code source:

./gradlew wrapper --gradle-version <version> --distribution-type all

Si vous spécifiez le type de distribution avec "all", Gradle téléchargera les fichiers source à utiliser par votre environnement de développement.

Pros:

  • Les IDE auront un accès immédiat au code source. Par exemple, Intellij IDEA ne vous demandera pas de mettre à jour vos scripts de compilation pour inclure la distribution source (car cette commande l'a déjà fait).

inconvénients:

  • Processus de construction plus long/plus long car il télécharge le code source. C'est une perte de temps/d'espace sur un build ou un serveur CI où le code source n'est pas nécessaire.

Veuillez commenter ou fournir une autre réponse si vous connaissez une option de la ligne de commande pour dire à Gradle de ne pas télécharger les sources sur un serveur de compilation.

3
Shorn
  1. Vous ne les générerez qu'une fois, mais vous les mettrez à jour si vous avez besoin d'une nouvelle fonctionnalité ou d'un plugin nécessitant une version plus récente de Gradle.

    Meilleure façon de mettre à jour: à partir de la version 2.2 de Gradle, vous pouvez simplement télécharger et extraire la version complète ou binaire distribution de Gradle , et exécuter:

    $ <pathToExpandedZip>/bin/gradle wrapper
    

    Nul besoin de définir une tâche, bien que vous ayez probablement besoin d’une sorte de fichier build.gradle.

    Ceci mettra à jour ou créera le wrapper gradlew et gradlew.bat ainsi que gradle/wrapper/gradle-wrapper.properties et le gradle-wrapper.jar pour fournir la version actuelle de gradle, encapsulée.

  2. Ceux-ci font tous partie de l'emballage.

  3. Certains fichiers build.gradle font référence à d'autres fichiers ou à des fichiers de sous-répertoires qui sont des sous-projets ou des modules. Cela devient un peu compliqué, mais si vous avez un projet, vous avez essentiellement besoin d’un fichier.

  4. settings.gradle gère le projet, le module et d'autres types de noms et de paramètres. gradle.properties configure les variables réutilisables pour vos fichiers de niveaux si vous le souhaitez et si vous estimez qu'ils seraient plus clairs de cette façon.

1
dlamblin