web-dev-qa-db-fra.com

Pourquoi Gradle Wrapper doit-il être associé à VCS?

D'après la documentation de Gradle:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.wrapper.Wrapper.html

Les scripts générés par cette tâche sont destinés à être validés pour votre système de contrôle de version. Cette tâche génère également un petit gradle-wrapper.jar Le fichier JAR d'amorçage et le fichier de propriétés devant contenir soyez également engagé envers votre VCS. Les scripts des délégués à ce fichier JAR.

De:Que ne devrait PAS être sous contrôle de source?

Je pense que Generated files ne devrait pas être dans le VCS.

Quand gradlew et gradle/gradle-wrapper.jar sont-ils nécessaires?

Pourquoi ne pas stocker un gradle version dans le fichier build.gradle?

111
farmer1992

Parce que l’intérêt de l’emballage Gradle est de pouvoir, sans avoir jamais installé Gradle, et sans même savoir comment il fonctionne, où le télécharger, quelle version, cloner le projet à partir du VCS, exécuter le script gradlew contient, et pour construire le projet sans aucune étape supplémentaire.

Si vous n'aviez qu'un numéro de version de gradle dans un fichier build.gradle, vous auriez besoin d'un README expliquant à tous que la version de gradle X doit être téléchargée à partir de l'URL Y et installée la version est incrémentée.

84
JB Nizet

Parce que l’intérêt de l’emballage gradle est de pouvoir, sans jamais avoir installé gradle

Le même argument est valable pour le JDK, voulez-vous également le valider? Engagez-vous également toutes vos bibliothèques de dépendances?

Les dépendances doivent être mises à niveau en permanence à mesure que de nouvelles versions sont publiées. Pour obtenir la sécurité et autres corrections de bugs. Et parce que, si vous êtes loin derrière, il peut être très fastidieux de vous mettre à jour à nouveau.

Si l'encapsuleur de niveaux est incrémenté pour chaque nouvelle version et qu'il est engagé, le référentiel deviendra très volumineux. Le problème est évident lorsque vous travaillez avec VCS distribué où un clone téléchargera toutes les versions de tout. 

, et sans même savoir comment ça marche

Créez un script de génération qui télécharge le wrapper et l'utilise pour générer. Tout le monde n'a pas besoin de savoir comment fonctionne le script, il doit accepter que le projet est construit en l'exécutant.

, où le télécharger, quelle version

task wrapper(type: Wrapper) {
 gradleVersion = 'X.X' 
}

Et alors

gradle wrapper

Pour télécharger la version correcte.

, pour cloner le projet à partir du VCS, pour exécuter le script gradlew qu’il contient et pour construire le projet sans étape supplémentaire.

Résolu par les étapes ci-dessus. Le téléchargement du wrapper Gradle n’est pas différent du téléchargement d’autres dépendances. Le script pourrait être intelligent pour vérifier la présence d’un wrapper de gradle actuel et le télécharger uniquement s’il existe une nouvelle version.

Si le développeur n'a jamais utilisé Gradle auparavant et ne sait peut-être pas que le projet est construit avec Gradle. Ensuite, il est plus évident de lancer "build.sh" par rapport à "gradlew build".

Si vous n'aviez qu'un numéro de version de gradle dans un fichier build.gradle, vous auriez besoin d'un README expliquant à tous que la version de gradle X doit être téléchargée à partir de l'URL Y et installée.

Non, vous n’auriez pas besoin d’un fichier README. Vous pourriez en avoir un, mais nous sommes des développeurs et nous devrions automatiser autant que possible. Créer un script, c'est mieux.

et vous devriez le faire chaque fois que la version est incrémentée.

Si les développeurs conviennent que le bon processus consiste à:

  1. Clone repo
  2. Exécuter le script de construction

Ensuite, la mise à niveau vers la dernière version de Gradle wrapper ne pose aucun problème Si la version est incrémentée depuis la dernière exécution, le script peut télécharger la nouvelle version.

62
Tomas Bjerre

Je voudrais recommander une approche simple.

Dans le fichier README de votre projet, indiquez qu'une étape d'installation est requise, à savoir:

gradle wrapper --gradle-version 3.3

Cela fonctionne avec Gradle 2.4 ou supérieur. Cela crée un wrapper sans nécessiter l'ajout d'une tâche dédiée à "build.gradle".

Avec cette option, ignore (ne pas archiver) ces fichiers/dossiers pour le contrôle de version:

  • ./gratuit
  • gradlew
  • gradlew.bat

L'avantage clé est que vous n'avez pas à enregistrer un fichier téléchargé dans le contrôle de source. Cela coûte une étape supplémentaire lors de l'installation. Je pense que ça vaut le coup.

27
David J.