Was sind die Highlights der Hauptunterschiede zwischen den beiden Tools?
Projektstruktur
Maven bevorzugt eine bestimmte Projektstruktur: Man muss sich dazu verpflichten, Dinge auf die Maven Way zu tun. Maven enthält allgemeine Build-Schritte, die bereits in einem Stammverzeichnis konfiguriert sind pom.xml
, das normalerweise von allen anderen Projekten geerbt wird pom.xml
.
Ant + Ivy ist offener: Obwohl es viel kann, gibt es nur wenige grundlegende Anforderungen hinsichtlich der Projektstruktur oder der Verwendung von Skripten. Es gibt keine vorgegebenen Build-Aufgaben, Ziele oder Prozesse. Jedes build.xml
ist eine saubere Tafel (außer natürlich mit einem anderen Skript).
Orientierung
Maven ist Ziel orientiert. Sie sagen nicht "Dieses Build-Ziel ausführen", sondern fordern es zum "Erstellen" oder "Bereitstellen" auf, und Maven unternimmt alles, um dorthin zu gelangen: Sie sagen, was Sie tun möchten.
Ant + Ivy ist aufgabenorientiert . Jede Aufgabe ist implementierungsdefiniert und benutzerdefiniert. Sie sagen, wie Sie tun sollen, was Sie wollen.
Abhängigkeitsmanagement
Maven ist am bekanntesten für die automatische Behandlung von Abhängigkeiten. Es werden die richtigen Versionen beim Erstellen ohne Benutzerinteraktion heruntergeladen, solange die Repository-URLs im Voraus ordnungsgemäß konfiguriert wurden.
Ant hat kein Abhängigkeitsmanagement außer "Java Classpath". Ivy fügt ein Abhängigkeitsmanagement hinzu, das etwas langwieriger als Maven ist, aber dennoch automatisiert. Der Schlüssel hier ist, dass Sie kein Abhängigkeitsmanagement auswählen können (z. B. "Gläser in meiner Distribution enthalten oder in die Quellcodeverwaltung eingecheckt") oder es über Ivy auslagern können. Diese Wahl bedeutet mehr Flexibilität, um die Projektanforderungen zu erfüllen.
Benutzerfreundlichkeit
Maven ist (theoretisch) einfach zu bedienen. Jeder Entwickler kann ein Maven-Projekt abholen und sofort wissen, wo sich alle Projektressourcen befinden und wofür sie bestimmt sind. Dies liegt daran, dass Maven als erstes eine bestimmte Vorgehensweise hat.
Ant + Ivy kann eine steilere Lernkurve, weil jedes Projekt kann unterschiedlich sein. Unterschiedliche Projekte können unterschiedliche Wege haben, um dieselben Ziele zu erreichen.
Erweiterbarkeit
Maven ermöglicht das Schreiben von Plugins und das Ändern des Erstellungsprozesses. Es wird jedoch sofort mit einem Root ausgeliefert pom.xml
, der Entwickler zu den vorgegebenen Build-Prozessen führt. Neue Ziele oder Build-Schritte erfordern sorgfältige Überlegungen und zusätzlichen Aufwand, um in den Build-Prozess eingebunden zu werden.
Ant + Ivy ermöglicht auch das Schreiben von Plugins und neuen Aufgaben: Dies ist recht einfach und man kann eine neue Aufgabe mit minimalem Aufwand integrieren. Es gibt keine vorgegebenen Ziele, in die man mischen oder die neue Aufgabe integrieren kann.
Wie kam es, dass Apache zwei völlig getrennte Sätze von Werkzeugen entwickelte, deren Zweck letztendlich so ähnlich ist?
Das erste, was zu verstehen ist, ist, dass das Apache-Projekt nichts anderes als ein Dach ist, unter dem separate, unabhängige Projekte arbeiten. Verschiedene Teams arbeiten an verschiedenen Projekten. Während einzelne Entwickler möglicherweise an mehreren Projekten arbeiten, gibt es keine allgemeine Roadmap, die Ant, Ivy und Maven enthält.
Ameise kam zuerst. Es wurde als Java-Äquivalent zu Make entwickelt. Während Make Java-Projekte erstellen kann, ist es mühsam: Make existierte, um eine Reihe von Kompilierungseinheiten separat zu kompilieren und sie dann zu verknüpfen. Der Java-Weg besteht darin, javac
alles auf einmal zu kompilieren, und das, was wir "Verknüpfen" nennen, tritt zur Laufzeit wirklich im Bauch der JVM auf. Make war nicht das richtige Werkzeug für den Job: Ein Makefile für Java besteht im Grunde aus einem oder zwei Zielen ( javac
, jar
).
Ant fügte ein wenig Struktur zu Make hinzu, änderte den Prozess jedoch nicht grundlegend.
Nach einer Weile wurde der Community klar, dass das Aufspüren von Glasdateien keinen Spaß machte. Darüber hinaus gab es keine Standardmethode zum Verfassen von Projekten. Ohne Konsistenz war die Java-Entwicklung ein Chaos. Maven wurde entwickelt, um diese Probleme zu lösen: Es würde eine gemeinsame Projektstruktur bringen und das Aufspüren von JAR-Dateien automatisieren.
Ant war jedoch immer noch sehr nützlich. Einige Projekte eignen sich eher für den Ad-hoc-Charakter von Ants Prozessen. Einige Projekte kompilieren keinen Code. Einige Projekte waren alt und es war unwahrscheinlich, dass jemand sie auf Maven "upgraden" würde.
Mit dabei ist Ivy: Es erweitert Ant um das Abhängigkeitsmanagement und bietet Projekten das Beste aus beiden Welten. Sie können Ihre Legacy-Skripte oder Ihre hochgradig angepasste Umgebung beibehalten, erhalten jedoch die wichtigste Funktion von Maven: das Abhängigkeitsmanagement.