Ich möchte einigen der in diesem Forum vorgebrachten Beschwerden entgegentreten:
Maven ist alles oder nichts. Oder zumindest soweit ich es aus der Dokumentation entnehmen konnte. Sie können Maven nicht einfach als Ersatz für Ameisen verwenden und schrittweise erweiterte Funktionen übernehmen.
Das ist nicht wahr. Mavens großer Gewinn besteht darin, Ihre Abhängigkeiten auf rationale Weise zu verwalten. Wenn Sie dies in Maven und alles andere in Ant tun möchten, können Sie dies tun. Hier ist wie:
<?xml version="1.0" encoding="UTF-8"?>
<project name="foo" basedir="." xmlns:maven="antlib:org.apache.maven.artifact.ant" >
<maven:dependencies verbose="true" pathId="maven.classpath">
<maven:pom id="maven.pom" file="pom.xml" />
</maven:dependencies>
</project>
Sie haben jetzt ein Klassenpfadobjekt mit dem Namen 'maven.classpath', das alle in der POM-Datei definierten Maven-Abhängigkeiten enthält. Alles, was Sie brauchen, ist, das Maven Ant Tasks Jar in das lib-Verzeichnis Ihrer Ameise zu legen.
Maven macht Ihren Erstellungsprozess von Ihrer Netzwerkverbindung abhängig.
Der Standardprozess zum Abrufen von Abhängigkeiten und Plugins hängt von einer Netzwerkverbindung ab, ja, jedoch nur für den ersten Build (oder wenn Sie die verwendeten Abhängigkeiten oder Plugins ändern). Danach werden alle Gläser lokal zwischengespeichert. Wenn Sie eine Verbindung ohne Netzwerk erzwingen möchten, können Sie maven anweisen, den Offline-Modus zu verwenden.
Es legt Ihnen von Anfang an eine starre Struktur auf.
Es ist nicht klar, ob sich dies auf das Dateiformat oder das Problem "Konvention versus Konfiguration" bezieht. Für letztere gibt es viele unsichtbare Standardeinstellungen wie den erwarteten Speicherort von Java-Quelldateien und -Ressourcen oder die Kompatibilität der Quelle. Dies ist jedoch keine Starrheit, sondern setzt für Sie sinnvolle Standardeinstellungen, sodass Sie diese nicht explizit definieren müssen. Alle Einstellungen können ziemlich einfach überschrieben werden (obwohl es für Anfänger schwierig sein kann, in der Dokumentation zu finden, wie bestimmte Dinge geändert werden können).
Wenn Sie über das Dateiformat sprechen, wird dies in der Antwort auf den nächsten Teil behandelt ...
Es ist XML-basiert und daher genauso schwer zu lesen wie ANT.
Zunächst einmal sehe ich nicht, wie Sie sich darüber beklagen können, dass ein Aspekt von etwas "Nicht besser als Ameise" eine Rechtfertigung dafür ist, dass es einen schlechten Ruf hat. Zweitens, während es noch XML ist, ist das Format des XML viel definierter. Da es so definiert ist, ist es außerdem viel einfacher, einen vernünftigen Thick-Client-Editor für ein POM zu erstellen. Ich habe lange Seiten gesehen und Skripte erstellt, die überall herumspringen. Ein Ant-Build-Skript-Editor wird dies nicht schmackhafter machen, sondern nur eine weitere lange Liste miteinander verbundener Aufgaben, die auf etwas andere Weise dargestellt werden.
Trotzdem gibt es ein paar Beschwerden, die ich hier gesehen habe und die eine gewisse Gültigkeit haben oder hatten, das größte Wesen
- Dokumentation ist schlecht / fehlt
- Reproduzierbare Builds
- Die Eclipse-Integration ist schlecht
- Bugs
Darauf habe ich zwei Antworten. Erstens ist Maven ein viel jüngeres Tool als Ant oder Make. Sie müssen also damit rechnen, dass es einige Zeit dauern wird, bis der Reifegrad dieser Anwendungen erreicht ist. Zweitens: Wenn es Ihnen nicht gefällt, beheben Sie es . Es ist ein Open-Source-Projekt, und es zu verwenden und sich dann über etwas zu beschweren, an dessen Lösung jeder beteiligt sein kann, scheint mir ziemlich dumm. Gefällt dir die Dokumentation nicht? Tragen Sie dazu bei, um es für Anfänger klarer, vollständiger oder zugänglicher zu machen.
Das Problem mit reproduzierbaren Builds gliedert sich in zwei Probleme: Versionsbereiche und automatische Maven-Plugin-Updates. Wenn Sie beim erneuten Erstellen eines Projekts ein Jahr später sicherstellen, dass Sie genau dasselbe JDK und genau dieselbe Ant-Version verwenden, ist dies genau das gleiche Problem mit einem anderen Namen. Für Versionsbereiche empfehle ich, an einem Plugin zu arbeiten, das einen temporären POM mit gesperrten Versionen für alle direkten und transitiven Abhängigkeiten erstellt und ihn zum Teil des Maven-Release-Lebenszyklus macht. Auf diese Weise sind Ihre Release-Build-Poms immer genaue Beschreibungen aller Abhängigkeiten.