Frage

Was ist ein anderes Build-Tool auf Java gezielt mich wirklich bekommen?

Wenn Sie Gradle über ein anderes Werkzeug verwenden, warum?

War es hilfreich?

Lösung

Ich benutze keinen Gradle im Zorn selbst (nur ein Spielzeug Projekt so weit) [ Autor bedeutet, dass sie Gradle nur so ein Spielzeug Projekt verwendet haben bisher nicht, dass Gradle ist ein Spielzeug-Projekt - siehe Kommentare] , aber ich würde sagen, dass die Gründe, die man in Betracht ziehen würde verwenden, es wäre wegen der Frustrationen Ant und Maven.

Nach meiner Erfahrung Ant ist oft nur schreiben (ja, ich weiß, dass es möglich ist, schön modular, elegant bauen s, aber die Tatsache ist, die meisten Menschen nicht). Für alle nicht-trivialen Projekte wird es knifflige und legt großen Wert darauf, dass komplexe baut wirklich tragbar sind. Seine Unabdingbarkeit zu Nachbildung der Konfiguration führen kann zwischen Builds (obwohl Makros hier helfen kann).

Maven nimmt den umgekehrten Weg und erwartet, dass Sie vollständig mit dem Maven-Lebenszyklus integrieren. Erfahrene Ant Benutzer finden dies besonders schrill wie Maven viele der Freiheiten beseitigt Sie in Ant haben. Zum Beispiel gibt es eine Sonatype Blog dass aufzählt viele der Maven Kritik und ihre Antworten.

Der Maven Plugin-Mechanismus ermöglicht eine sehr leistungsstarke Build-Konfigurationen und das Vererbungsmodell bedeutet, dass Sie eine kleine Gruppe von Eltern POMs definieren können Ihre Build-Konfigurationen für das gesamte Unternehmen und einzelne Projekte einkapseln kann diese Konfigurationen erben, sie leichte verlassen. Maven-Konfiguration ist sehr ausführlich (obwohl Maven 3 verspricht diese Adresse), und wenn Sie wollen etwas tun, was „nicht der Maven Weg“ Sie ist eine Plugin zu schreiben oder die Hacky Ant-Integration verwenden. Hinweis ich zufällig wie Maven Plugins schreiben, aber erkennen, dass viele der Bemühungen Objekt wird beteiligt.

Gradle verspricht den Sweet Spot zwischen Ant und Maven zu schlagen. Es verwendet Ivy 's Ansatz für Abhängigkeitsauflösung. Es ermöglicht die Konvention über Konfiguration, sondern umfasst auch Ant Aufgaben als Bürger erster Klasse. Es ist auch klug können Sie bestehende Maven / Ivy-Repositories verwenden.

Also, wenn Sie getroffen haben, habe mit einem der Ant / Maven Schmerzpunkte stecken, ist es wahrscheinlich wert ist Gradle auszuprobieren, obwohl meiner Meinung nach bleibt es abzuwarten, ob Sie nicht nur bekannte Probleme handeln würde, für unbekannte. Der Beweis des Puddings ist im Essen aber so würde ich Urteil behalten, bis das Produkt ein wenig reifes und andere haben Knicke ausgebügelt (sie nennen es Kante aus einem Grunde Blutungen). Ich werde immer noch, obwohl es in meinem Spielzeug Projekt verwenden, es ist immer gut, sich bewusst der Optionen zu sein.

Andere Tipps

Gradle können Sie für viele Zwecke nutzen - es ist eine viel bessere Schweizer Armeemesser als Ant -. Aber es konzentriert sich im Besonderen auf Multi-Projekt baut

Zu allererst Gradle ist ein Abhängigkeitsprogrammierwerkzeug, das auch bedeutet, es ist ein Programmierwerkzeug. Mit Gradle können Sie einen beliebigen Aufgabe in Ihrem Setup ausführen und Gradle wird sicherstellen, dass alle erklärt dependecies ordnungsgemäß und rechtzeitig ausgeführt. Ihr Code kann über viele Verzeichnisse in jeder Art von Layout (Baum, flach, verstreut, ...) verteilt werden.

Gradle hat zwei verschiedene Phasen: Auswertung und Ausführung. Grundsätzlich bei der Auswertung Gradle wird sehen und zu bewerten Skripte in den Verzeichnissen bauen es aussehen soll. Während der Ausführung wird Gradle Aufgaben auszuführen, die bei der Auswertung unter Berücksichtigung der Aufgabe gegenseitige Abhängigkeiten geladen wurden.

An der Spitze dieser Abhängigkeit Programmierfunktionen Gradle fügt Projekt und JAR-Abhängigkeitsmerkmale von Intergration mit Apache Ivy. Wie Sie wissen Ivy ein viel leistungsfähiger ist und viel weniger opinionated Abhängigkeitsmanagement-Tool als Maven sagen.

Gradle erkennt Abhängigkeiten zwischen Projekten und zwischen Projekten und JAR-Dateien. Gradle arbeitet mit Maven-Repositories (Download und Upload) wie die ibiblio eines oder eigenes Repositories, sondern unterstützt auch und andere Art von Repository-Infrastruktur Sie haben könnten.

In Multiprojekt baut Gradle sowohl anpassungsfähig ist und passt sich an die Struktur der Build und Architektur. Sie müssen Ihre Struktur oder Architektur zu Ihrem Build-Tool nicht anpassen, wie dies bei Maven erforderlich.

Gradle sehr hart versucht, nicht in die Quere zu kommen, ein Versuch, Maven fast nie macht. Convention ist gut noch so ist die Flexibilität. Gradle gibt Ihnen viel mehr Funktionen als Maven tut, aber am wichtigsten ist in vielen Fällen Gradle finden Sie eine schmerz ¨Ubergangspfad bieten weg von Maven.

Dies kann ein bisschen umstritten sein, aber Gradle verbirgt nicht die Tatsache, dass es sich um eine vollwertige Programmiersprache ist.

Ant + ant-contrib ist im Wesentlichen eine Turing komplette Programmiersprache, die niemand wirklich will programmieren.

Maven versucht, den umgekehrten Weg zu nehmen versuchen, vollständig deklarative zu sein und zwingt Sie, ein Plugin zu schreiben und kompilieren, wenn Sie Logik benötigen. Vorgeschrieben ist auch ein Projekt Modell, das völlig unflexibel ist. Gradle kombiniert das Beste aus all diesen Tools:

  • Es folgt Konvention-over-Konfiguration (ala Maven), aber nur in dem Maße Sie es
  • wollen
  • Sie können damit flexibel kundenspezifische Aufgaben wie in Ant
  • schreiben
  • Sie bietet Multi-Modul Projektunterstützung, die sowohl für Ant und Maven
  • überlegen ist
  • Sie hat eine DSL, das macht die 80% Dinge einfach und die 20% Dinge möglich (im Gegensatz zu anderen Build-Tool, die das 80% leicht, 10% und 10% möglich effektiv unmöglich machen).

Gradle ist die konfigurierbare und flexible Build-Tool ich noch zu verwenden. Es erfordert einige Investitionen im Vorfeld die DSL und Konzepte wie Konfigurationen zu lernen, aber wenn man ein No-Nonsense und vollständig konfigurierbare JVM Build-Tool benötigen ist es schwer zu schlagen.

Gradle kombiniert schön beide Ant und Maven, das Beste aus beiden Frameworks nehmen. Flexibilität von Ant und Konvention über Konfiguration, Verwaltung von Abhängigkeiten und Plugins von Maven.

Also, wenn Sie ein Standard-Java-Build haben, wie in Maven, aber Prüfaufgabe hat einigen benutzerdefinierten Schritt zu tun es wie folgt aussehen könnte.

build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

Hinzu kommt, dass es groovy Syntax verwendet, die viel mehr Ausdruck verleiht Macht dann ant / Maven xml.

Es ist ein Superset von Ant - Sie all Ant-Tasks in gradle mit schöner, groovy-ähnlicher Syntax verwenden können, dh

.
ant.copy(file:'a.txt', toDir:"xyz")

oder

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

Wir verwenden Gradle und wählten es über Maven und Ant. Ant hatte uns volle Flexibilität, und Ivy gibt besseres Abhängigkeitsmanagement als Maven, aber es ist nicht große Unterstützung für Multi-Projekt aufbaut. Sie beenden eine Menge Codierung tun up Multi-Projekt zu unterstützen aufbaut. Auch mit etwas Build-by-Konvention ist schön und macht Skripte prägnanter bauen. Mit Maven, dauert es zu weit vereinbarungs bauen und Ihren Build-Prozess Customizing wird ein Hack. Außerdem fördert Maven jedes Projekt ein Artefakt zu veröffentlichen. Manchmal haben Sie ein Projekt in Teilprojekte aufgeteilt, aber Sie wollen, dass alle der Teilprojekte zusammen gebaut und versioniert werden. Nicht wirklich etwas Maven konzipiert ist.

Mit Gradle können Sie die Flexibilität von Ant haben und durch Konvention von Maven zu bauen. Zum Beispiel ist es trivial, den konventionellen Build Lebenszyklus mit Ihrer eigenen Aufgabe zu verlängern. Und Sie sind nicht eine Konvention verwenden gezwungen, wenn Sie nicht wollen. Groovy ist viel schöner, um Code als XML. In Gradle können Sie Abhängigkeiten zwischen Projekten auf dem lokalen Dateisystem, ohne die Notwendigkeit definieren Artefakte für jede in ein Repository zu veröffentlichen. Schließlich verwendet Gradle Ivy, so hat sie ausgezeichnetes Abhängigkeitsmanagement. Der einzige wirkliche Nachteil für mich so weit ist der Mangel an reifem Eclipse-Integration, aber die Optionen für Maven sind nicht wirklich viel besser.

Dies ist nicht meine Antwort, aber es schwingt auf jeden Fall bei mir. Es ist von Thoughtworks Technology Radar vom Oktober 2012 :

  

Zwei Dinge haben verursacht Müdigkeit mit XML-basierten Build-Tool wie Ant und   Maven: zu viele bösen spitze Klammern und die Grobkörnigkeit von Plug-in   Architekturen. Während Syntax Probleme können mit durch behandelt werden   Generation, Plug-In-Architekturen begrenzen stark die Fähigkeit für Build   Werkzeuge anmutig zu wachsen, wie Projekte komplexer geworden. Wir sind gekommen   zu fühlen, dass Plug-In die falschen Ebene der Abstraktion ist, und es vorziehen,   sprachbasierte Tools wie Gradle und Rechen statt, weil sie bieten   feinkörniger Abstraktionen und mehr Flexibilität langfristig.

Gradle setzte den Spaß zurück in Gebäude / Montage-Software. Früher habe ich ant Software meine ganze Karriere zu bauen, und ich habe immer den tatsächlichen „buildit“ Teil der dev Arbeit als ein notwendige Übel zu sein. Vor ein paar Monaten unser Unternehmen wuchs müde von nicht ein binäres Repo mit (auch bekannt als in den Gläsern in die VCS-Kontrolle) und ich hatte die Aufgabe, zu untersuchen, dies gegeben. Gestartet mit Efeu, da es auf der Ameise verschraubt werden konnte, hatte nicht viel Glück meine gebaut Artefakte bekommen veröffentlicht, wie ich wollte. Ich ging für Maven und gehackt mit xml weg, arbeitete herrlichen für einige einfache Helfer Libs aber ich lief in ernsthafte Probleme versuchen, Anwendungen für deploy bereit zu bündeln. Hassled schon eine ganze Weile Plugins Googeln und Lesen von Foren und Liquidation Billionen Unterstützung Gläser für verschiedene Plug-ins herunterzuladen, die ich mit hatte eine harte Zeit. Schließlich ging ich für gradle (ganz bitter an dieser Stelle bekommen, und ärgert sich, dass „Es sollte nicht dies schwer!“)

Aber vom ersten Tag meiner Stimmung begann zu verbessern. Ich war immer irgendwo. Habe mich wie 2 Stunden mein erstes ant-Modul und die Build-Datei war im Grunde nichts zu migrieren. Unkompliziert einen Bildschirm. Der große "Wow" war: bauen Skripte in xml, wie dumm ist das denn? die Tatsache, dass mir eine Abhängigkeit nimmt eine Reihe erklärt ist sehr ansprechend -> Sie können einfach alle Abhängigkeiten für ein bestimmtes Projekt auf einer Seite sehen. Von da an habe ich für jedes Problem auf einer konstanten Rolle, war ich bisher konfrontiert gibt es eine einfache und elegante Lösung. Ich denke, das sind die Gründe:

  • groovy ist sehr intuitiv für Java-Entwickler
  • Dokumentation ist groß genial
  • die Flexibilität ist endlos

Jetzt verbringe ich meine Tage damit, neue Funktionen denken, bis zu unserem Build-Prozess hinzuzufügen. Wie krank ist das denn?

Es ist auch viel einfacher zu verwalten nativen aufbaut. Ant und Maven sind effektiv Java-only. Einige Plugins existieren für Maven, die versuchen, einige einheimische Projekte zu handhaben, aber sie haben nicht eine effektive Arbeit tun. Ant-Tasks werden kann geschrieben, dass kompilieren einheimische Projekte, aber sie sind zu komplex und umständlich.

Wir tun Java mit JNI und vielen anderen einheimischer Bits. Gradle vereinfachte unser Ant Chaos deutlich. Als wir begannen Abhängigkeitsmanagement auf die nativen Projekte vorzustellen, es war chaotisch. Wir haben Maven, es zu tun, aber das Äquivalent Gradle Code war ein winziger Bruchteil von dem, was in Maven nötig war, und die Leute es lesen und verstehen es ohne Maven-Gurus zu werden.

Ich bin damit einverstanden teilweise mit Ed Staub. Gradle definitiv stärker ist im Vergleich zu maven und mehr Flexibilität langfristig bietet.

eine Auswertung Nach der Durchführung von Maven zu bewegen, um zu Gradle, entschieden wir uns selbst zu bleiben für zwei Fragen im Zusammenhang mit maven wir trafen mit gradle (Geschwindigkeit ist langsamer als Maven, Proxy nicht funktioniert).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top