Aus Gradles Dokumentation: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.wrapper.Wrapper.html
Die von dieser Aufgabe generierten Skripte sollen an Ihr Versionskontrollsystem übergeben werden. Diese Aufgabe generiert auch eine kleine gradle-wrapper.jar-Bootstrap-JAR-Datei und eine Eigenschaftendatei, die auch für Ihr VCS festgeschrieben werden sollen. Die Skripte werden an diese JAR delegiert.
Von: Was sollte NICHT unter Quellcodeverwaltung sein?
Ich denke Generated files
sollte nicht im VCS sein.
Wann werden gradlew
und gradle/gradle-wrapper.jar
gebraucht?
Warum nicht ein gradle version
in der build.gradle
Datei speichern?
version-control
gradle
Bauer1992
quelle
quelle
Antworten:
Denn der springende Punkt des Gradle-Wrappers ist, in der Lage zu sein, ohne jemals Gradle installiert zu haben und ohne zu wissen, wie es funktioniert, von wo es heruntergeladen werden kann, von welcher Version, das Projekt aus dem VCS zu klonen und das Gradlew-Skript auszuführen enthält, und das Projekt ohne zusätzlichen Schritt zu erstellen.
Wenn Sie nur eine Gradle-Versionsnummer in einer build.gradle-Datei hätten, benötigen Sie eine README-Datei, in der allen erklärt wird, dass die Gradle-Version X von der URL Y heruntergeladen und installiert werden muss, und Sie müssten dies jedes Mal tun, wenn die Version erhöht wird.
quelle
Das gleiche Argument gilt für das JDK. Möchten Sie das auch festlegen? Übernehmen Sie auch alle Ihre Abhängigkeitsbibliotheken?
Die Abhängigkeiten sollten kontinuierlich aktualisiert werden, wenn neue Versionen veröffentlicht werden. Um Sicherheit und andere Fehlerbehebungen zu erhalten. Und wenn Sie zu weit zurückliegen, kann es eine sehr zeitaufwändige Aufgabe sein, wieder auf dem neuesten Stand zu sein.
Wenn der Gradle-Wrapper für jede neue Version erhöht und festgeschrieben wird, wird das Repo sehr groß. Das Problem ist offensichtlich, wenn Sie mit verteiltem VCS arbeiten, bei dem ein Klon alle Versionen von allem herunterlädt.
Erstellen Sie ein Build-Skript, das den Wrapper herunterlädt und zum Erstellen verwendet. Jeder muss nicht wissen, wie das Skript funktioniert, er muss zustimmen, dass das Projekt durch Ausführen erstellt wird.
Und dann
Um die richtige Version herunterzuladen.
Gelöst durch die obigen Schritte. Das Herunterladen des Gradle-Wrappers unterscheidet sich nicht vom Herunterladen anderer Abhängigkeiten. Das Skript könnte klug genug sein, um nach einem aktuellen Gradle-Wrapper zu suchen und es nur herunterzuladen, wenn es eine neue Version gibt.
Wenn der Entwickler Gradle noch nie verwendet hat und möglicherweise nicht weiß, dass das Projekt mit Gradle erstellt wurde. Dann ist es offensichtlicher, eine "build.sh" auszuführen, als eine "gradlew build".
Nein, Sie würden keine README-Datei benötigen. Sie könnten eine haben, aber wir sind Entwickler und sollten so viel wie möglich automatisieren. Das Erstellen eines Skripts ist besser.
Wenn die Entwickler zustimmen, dass der richtige Prozess ist:
Dann ist ein Upgrade auf den neuesten Gradle Wrapper kein Problem. Wenn die Version seit der letzten Ausführung erhöht wurde, kann das Skript die neue Version herunterladen.
quelle
build.gradle
in der Versionskontrolle haben und darin haben Sie:task wrapper(type: Wrapper) { gradleVersion = 'X.X' }
Danngradle wrapper
wird der Wrapper heruntergeladen, der verwendet wurde, und Sie können den alten Build reproduzieren.gradle wrapper
bei jedem Build nach dem Klonen auszuführen ? Dies macht Wrapper im Grunde genommen unbrauchbar, da der springende Punkt darin besteht, dass Sie Gradle nicht lokal installieren müssen, um das Projekt zu erstellen !Ich möchte einen einfachen Ansatz empfehlen.
Dokumentieren Sie in der README Ihres Projekts, dass ein Installationsschritt erforderlich ist, nämlich:
Dies funktioniert mit Gradle 2.4 oder höher. Dadurch wird ein Wrapper erstellt, ohne dass eine dedizierte Aufgabe zu "build.gradle" hinzugefügt werden muss.
Ignorieren Sie mit dieser Option diese Dateien / Ordner zur Versionskontrolle (nicht einchecken):
Der Hauptvorteil besteht darin, dass Sie keine heruntergeladene Datei zur Quellcodeverwaltung einchecken müssen. Die Installation kostet einen zusätzlichen Schritt. Ich denke es lohnt sich.
quelle
gradlew
. @edio Sie benötigen es, um eine bestimmte Version von gradle herunterzuladen und zu verwenden .Was ist das "Projekt"?
Möglicherweise gibt es eine technische Definition dieser Redewendung, die Build-Skripte ausschließt. Aber wenn wir diese Definition akzeptieren, müssen wir sagen, dass Ihr "Projekt" nicht alles ist, was Sie versionieren müssen!
Aber wenn wir sagen "Ihr Projekt" ist alles , was Sie getan haben . Dann können wir sagen, dass Sie es und nur es einschließen müssen in VCS aufnehmen müssen.
Dies ist sehr theoretisch und bei unseren Entwicklungsarbeiten möglicherweise nicht praktikabel. Deshalb ändern wir es in " Ihr Projekt ist jede Datei (oder jeder Ordner), die Sie benötigen, um sie direkt zu bearbeiten ".
"direkt" bedeutet "nicht indirekt" und "indirekt" bedeutet durch Bearbeiten einer anderen Datei, und dann wird ein Effekt in dieser Datei wiedergegeben .
Also haben wir das gleiche erreichen , dass OP sagte (und gesagt wird , hier ):
Ja. Weil du sie nicht erstellt hast . Sie sind also gemäß der zweiten Definition nicht Teil von "Ihrem Projekt".
Was ist das Ergebnis dieser Dateien:
build.gradle : Ja. Wir müssen es bearbeiten. Unsere Werke sollten versioniert sein.
Hinweis: Es gibt keinen Unterschied, wo Sie es bearbeiten. Ob in Ihrer Texteditor-Umgebung oder in der Projektstruktur- GUI-Umgebung. Wie auch immer, du machst es direkt !
gradle-wrapper.properties : Ja. Wir müssen mindestens die Gradle-Version in dieser Datei bestimmen.
gradle-wrapper.jar und gradlew [.bat] : Ich habe sie bis jetzt in keiner meiner Entwicklungsarbeiten erstellt oder bearbeitet! Die Antwort lautet also "Nein". Wenn Sie dies getan haben, lautet die Antwort "Ja" über Sie bei dieser Arbeit (und über dieselbe Datei, die Sie bearbeitet haben).
Der wichtige Hinweis über den aktuellen Fall ist der Benutzer, Ihre Repo - Klone auf diesen Befehl ausführen muss Repo
<root-directory>
zu automatisch generieren Wrapper - Dateien:$v
und$distType
werden aus gradle-wrapper.properties bestimmt :Weitere Informationen finden Sie unter https://gradle.org/install/ .
gradle
Die ausführbare Datei befindet sichbin/gradle[.bat]
in lokaler Verteilung. Es ist nicht erforderlich, dass die lokale Verteilung mit der im Repo festgelegten übereinstimmt. Nachdem Wrapper-Dateien erstellt wurden,gradlew[.bat]
kann die bestimmte Gradle-Verteilung automatisch heruntergeladen werden (falls nicht lokal vorhanden). Dann muss er / sie wahrscheinlich Wrapper-Dateien unter Verwendung einer neuengradle
ausführbaren Datei (in heruntergeladener Distribution) unter Verwendung der obigen Anweisungen neu generieren.Hinweis: In den obigen Anweisungen wird davon ausgegangen, dass der Benutzer lokal mindestens eine Gradle-Verteilung hat (z
~/.gradle/wrapper/dists/gradle-4.10-bin/bg6py687nqv2mbe6e1hdtk57h/gradle-4.10
. B. ). Es deckt fast alle realen Fälle ab. Aber was passiert, wenn der Benutzer noch keine Distribution hat?Er / Sie kann es manuell über die URL in der
.properties
Datei herunterladen . Wenn er es jedoch nicht in dem Pfad findet, den der Wrapper erwartet hat, lädt der Wrapper es erneut herunter! Der erwartete Pfad ist vollständig vorhersehbar, liegt jedoch außerhalb des Themas (siehe hier) für den komplexesten Teil).Es gibt auch einige einfachere (aber schmutzige) Wege. Beispielsweise kann er Wrapper-Dateien (außer
.properties
Dateien) von jedem anderen lokalen / Remote-Repository in sein Repository kopieren und dann in seinem Repository ausführengradlew
. Es wird automatisch die passende Distribution heruntergeladen.quelle
Laut Gradle-Dokumenten wird das Hinzufügen
gradle-wrapper.jar
zu VCS erwartet, da die Bereitstellung von Gradle Wrapper für Entwickler Teil des Gradle-Ansatzes ist:quelle
Alte Frage, frische Antwort. Wenn Sie gradle nicht oft aktualisieren (die meisten von uns nicht), ist es besser, es auf VCS zu übertragen. Der Hauptgrund für mich ist, die Build-Geschwindigkeit auf dem CI-Server zu erhöhen. Heutzutage werden die meisten Projekte von CI-Servern erstellt und installiert, die jedes Mal eine andere Serverinstanz haben.
Wenn Sie es nicht festschreiben, lädt der CI-Server für jeden Build ein JAR herunter und verlängert die Build-Zeit erheblich. Es gibt andere Möglichkeiten, um dieses Problem zu lösen, aber ich finde, dass diese am einfachsten zu warten ist.
quelle