Was sind die Unterschiede zwischen Bazel und Gradle?
Google nur open-Source seine build-tool Bazel. Was sind die Unterschiede zwischen diesem Werkzeug und der Gradle? Was kann Sie tun, dass Gradle nicht, was macht er besser und was ist Gradle besser machen?
InformationsquelleAutor der Frage user11171 | 2015-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Disclaimer: ich arbeite auf Bazel und ich bin nicht sehr vertraut mit Gradle. Aber einer meiner Kollegen schrieb ein Vergleich der beiden Systeme, die ich umschreiben, hier:
Bazel und Gradle, betonen unterschiedliche Aspekte des build-Erfahrung. Zum Teil, Ihre Prioritäten sind unvereinbar - Gradle ist der Wunsch nach Flexibilität und nicht-Aufdringlichkeit-Grenzen die Grenzen, die er auf einem build-Struktur, während Bazel den Wunsch nach Zuverlässigkeit und Leistung unbedingt erzwingt nicht verhandelbar Einschränkungen.
Gradle nicht Wert die gleichen Prinzipien, die Bazel hat, d.h. die Gradle-team legt großen Wert auf performance (inkrementelle builds, parallelisiert Konfiguration und Ausführung, den Gradle daemon), Korrektheit ("content-based "up-to-date" - Prüfung) und Reproduzierbarkeit (reiche Unterstützung für deklarative syntax, die Abhängigkeit der Versionsverwaltung, der explizit deklarierten Abhängigkeiten). Und Bazel Hinsicht die Notwendigkeit von flexiblen Projekt-layouts.
Die nuance ist, dass Gradle will, um gute Praktiken zu fördern, während Bazel will es erfordern. Gradle soll für einen Mittelweg zwischen der Ant-Erfahrung (der Freiheit zu definieren, Ihre eigenen Projekt-Struktur mit inkohärenten Ergebnisse) und die Maven-Erfahrung (erzwungen best practices mit keinen Raum für unterschiedliche Projekt-Anforderungen). Bazel ist der Auffassung, dass flexible Unterstützung des Projekts möglich ist, ohne dabei die starken Garantien, die es ermöglichen, seine leistungsstarken workflows.
Weder Philosophie ist mehr "richtig" - je nachdem, welches Werkzeug passt am besten für ein Projekt hängt von diesem Projekt ab die Werte.
Gradle Übersicht
Gradle ist ein hoch flexibles system, das macht es für die Benutzer einfach zu fertigen komplette, zuverlässige fließt mit minimalen Einschränkungen auf, wie Sie organisieren Ihre Projekte. Es tut dies durch Bereitstellung von leistungsfähigen Bausteinen (z.B. das automatische dependency-tracking und abrufen, eng integrierte Plug-in-Unterstützung) mit einem generischen, Turing-vollständige, scripting-Schnittstelle, die eine Kombination dieser Bausteine jedoch der Benutzer will.
Gradle die folgenden Punkte betont:
Bazel Übersicht
Bazel sich die Notwendigkeit des Aufbaus einer internen Google-Projekte zuverlässig und effizient. Weil Googles Entwicklungsumgebung ist ungewöhnlich groß und Komplex, Bazel bietet ungewöhnlich starke Garantien für die Integrität des builds und der ungewöhnlich geringen performance-overhead bei der Erreichung Ihnen.
Diese bietet die Grundlage für die kraftvolle Entwicklung von workflows gebaut, um reproduzierbare builds, wo ein "bauen" wird zu einer abstrakten Entität, auf die verwiesen werden kann, die wiederholt werden, übergeben, um auf verschiedenen Maschinen, und an beliebige Programme und Dienste, so dass jede Instanz bekannt ist, genau das gleiche.
Bazel die folgenden Punkte betont:
InformationsquelleAutor der Antwort kristina
Als Artikel-links neigen dazu, zu sterben, hier ist eine Zusammenfassung der die Gradle-Team Blick auf das Bazel (die meisten sind direkt an der Stelle aus dem Artikel, veröffentlicht im März 2015):
Es wurde entwickelt, um ein problem zu lösen einzigartigen Google, eine massive monolithische Codebasis (Hunderte von Millionen von LOC).
Der Parallelisierung Vorteil Bazel derzeit bietet, wird ergänzt werden durch "unsere neuen Konfigurations-und Komponenten-Modell" (beachten Sie den Artikel hier).
Bazel haben nicht eine hohe Ebene deklaratives build-Sprache, die macht das bauen einfach für Entwickler. Bei Google kann dies kompensiert werden mit einem eigenen service-team, die Eigentümer der build-tool.
Bazel ist nicht gebaut für die Erweiterbarkeit (obwohl das Bazel team-Entwicklung haben, da konterte dies mit der Zusicherung, dass Sie arbeiten auf Erweiterbarkeit).
Geschwindigkeit optimiert ist, um die Idee, dass alle transitiven Abhängigkeiten gespeichert sind, in einem großen repo; alle Bibliotheken und tools überprüft werden in diesem zentralen repository. Die meisten Unternehmen haben mehr verteilt dependency-management-Anforderungen.
Bazel ist *nix-nur, es läuft nicht unter Windows. Dies eliminiert eine große Anzahl von potenziellen Unternehmen.
Kein plugin-ökosystem.
InformationsquelleAutor der Antwort RCross