Warum hat Maven so einen schlechten Ruf? [geschlossen]


99

Im Internet wird viel darüber gesprochen, wie schlecht Maven ist. Ich benutze seit einigen Jahren einige Funktionen von Maven und der aus meiner Sicht wichtigste Vorteil ist das Abhängigkeitsmanagement.

Die Maven-Dokumentation ist nicht ausreichend, aber wenn ich etwas erledigen muss, finde ich es einmal heraus und dann funktioniert es (zum Beispiel, wenn ich das Signieren der Gläser implementiert habe). Ich denke nicht, dass Maven großartig ist, aber es löst einige Probleme, die ohne es ein echter Schmerz wären.

Warum hat Maven einen so schlechten Ruf und welche Probleme mit Maven kann ich in Zukunft erwarten? Vielleicht gibt es viel bessere Alternativen, die ich nicht kenne? (Zum Beispiel habe ich Ivy nie im Detail betrachtet.)

HINWEIS: Dies ist kein Versuch, ein Argument zu verursachen. Es ist ein Versuch, die FUD zu löschen.


29
Ich habe noch nie jemanden schlecht über Maven sprechen hören. Ich habe festgestellt, dass Projekte mit Maven viel produktiver sind als mit Ant.
Taylor Leese

2
Ich stimme Taylor zu. Ich habe Maven nicht benutzt, aber ich habe viele Leute gehört, die hoch darüber gesprochen haben. Diese Frage sieht FUD sehr ähnlich.
Matthew Flaschen

27
@ Taylor, @ Matthew, @ Victor: Ich bin überrascht, dass Sie einige der Maven-Rants nicht gesehen haben. Es ist ein sehr spaltendes Werkzeug. Es ist eine echte Liebes- oder Hasssache. Einige Leute lieben die Klugheit des Abhängigkeitsmanagements und beschuldigen diejenigen, die es nicht mögen, es nicht zu bekommen, und einige Leute sehen nur die Probleme, die bei komplexen verteilten Abhängigkeiten auftreten können und können, und entscheiden, dass es den Aufwand nicht wert ist.
Dan Dyer

8
Maven respektiert das KISS-Prinzip nicht. Versuchen Sie, etwas anderes als mvn clean install zu tun, und Sie sind in Schwierigkeiten. Mit Ameise können Sie ohne Schmerzen tun, was Sie wollen.
TraderJoeChicago

4
Es ist nur eine Anekdote, aber der Wechsel von Maven zu Ant führte dazu, dass unsere inkrementellen Bauzeiten von ~ 15 Sekunden auf weit über 2 Minuten stiegen. Sie werden nicht viele Maven-Fans in unserem Team finden.
Peter Bratton

Antworten:


141

Ich habe vor ungefähr sechs Monaten nach Maven gesucht. Wir haben ein neues Projekt gestartet und hatten kein Vermächtnis zu unterstützen. Das gesagt:

  • 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.
  • Laut der Dokumentation ist Maven ein transzendentales Glück, das all Ihre wildesten Träume wahr werden lässt. Sie müssen nur 10 Jahre über das Handbuch meditieren, bevor Sie erleuchtet werden.
  • Maven macht Ihren Erstellungsprozess von Ihrer Netzwerkverbindung abhängig.
  • Maven hat nutzlose Fehlermeldungen. Vergleichen Sie das "Ziel x existiert nicht im Projekt y" von ant mit dem "Ungültigen Task 'run" von mvn: Sie müssen eine gültige Lebenszyklusphase oder ein Ziel im Format plugin: target oder pluginGroupId: pluginArtifactId: pluginVersion: target "angeben. Es wird empfohlen, mvn mit -e auszuführen, um weitere Informationen zu erhalten. Dies bedeutet, dass dieselbe Nachricht und dann ein Stack-Trace für eine BuildFailureException gedruckt werden.

Ein großer Teil meiner Abneigung gegen Maven kann durch den folgenden Auszug aus Better Builds with Maven erklärt werden:

Wenn jemand wissen möchte, was Maven ist, fragt er normalerweise „Was genau ist Maven?“ Und erwartet eine kurze, fundierte Antwort. "Nun, es ist ein Build-Tool oder ein Scripting-Framework." Maven besteht aus mehr als drei langweiligen, wenig inspirierenden Wörtern. Es ist eine Kombination aus Ideen, Standards und Software, und es ist unmöglich, die Definition von Maven auf einfach verdaute Soundbits zu reduzieren. Revolutionäre Ideen sind oft schwer mit Worten zu vermitteln.

Mein Vorschlag: Wenn Sie die Ideen nicht mit Worten vermitteln können, sollten Sie nicht versuchen, ein Buch zu diesem Thema zu schreiben, da ich die Ideen nicht telepathisch aufnehmen werde.


134
Für diejenigen, die Maven verstehen, ist keine Erklärung notwendig. Für diejenigen, die dies nicht tun, ist keine Erklärung möglich.
Apocalisp

35
Einer Ihrer Stichpunkte ist falsch. -o - Offline-Modus, also nein, es macht Ihren Erstellungsprozess nicht von Ihrer Netzwerkverbindung abhängig.
MetroidFan2002

10
Ich stimme dem Alles-oder-Nichts-Punkt zu. Ich habe gesehen, dass viele Leute zu viel Zeit damit verschwenden, die Hälfte ihres Projektportfolios in Ameise und die Hälfte in Maven zu halten. Sobald Sie sich verpflichtet haben, müssen Sie die Arbeit investieren, um jeden Teil Ihrer Bereitstellung zu konvertieren.
sal

14
@ Apocalisp: Mit anderen Worten, die einzigen Leute, die Maven verstehen, sind die Leute, die es geschrieben haben?
Powerlord

5
Maven ist alles oder nichts. Das ist nicht wahr. Sie können maven für das Abhängigkeitsmanagement verwenden und sonst nichts, wenn Sie möchten. Sie benötigen lediglich ein funktionierendes Beispiel für die Verwendung der Maven Ant-Tasks zum Lesen Ihrer POM-Datei und zum Generieren eines ANT-Klassenpfads mit all Ihren Abhängigkeiten.
Jherico

109
  • Es legt Ihnen von Anfang an eine starre Struktur auf.
  • Es ist XML-basiert und daher genauso schwer zu lesen wie ANT.
  • Die Fehlerberichterstattung ist unklar und lässt Sie festsitzen, wenn etwas schief geht.
  • Die Dokumentation ist schlecht.
  • Es macht schwierige Dinge einfach und einfache Dinge schwierig.
  • Die Wartung einer Maven-Build-Umgebung nimmt zu viel Zeit in Anspruch, was den Sinn eines vollständig singenden Build-Systems zunichte macht.
  • Es dauert lange, um herauszufinden, dass Sie einen Fehler in maven gefunden und nichts falsch konfiguriert haben. Und die Fehler existieren und an überraschenden Orten.
  • Es verspricht viel, verrät dich aber wie einen schönen und verführerischen, aber emotional kalten und manipulativen Liebhaber.

45
++ Es macht schwierige Dinge einfach und einfache Dinge schwierig. Es ist so richtig!
Martin K.

8
"Es verspricht viel, verrät dich aber wie einen schönen und verführerischen, aber emotional kalten und manipulativen Liebhaber." hahahaha ... das klingt sehr nach dem Master Fong aus "Balls of Fury"
Cesar

8
Zu Punkt 2: Es werden fast immer Elemente verwendet, Attribute fast nie, sodass das XML noch schwerer zu lesen ist als das von Ant!
Carl Smotricz

4
+1 für die letzte Kugel. Nichts macht meinen Tag so, als würde ich auf eine großartige und lustige Analogie stoßen, die so wahr ist.
Adam

1
Die Dokumentation ist nicht schlecht, sie ist ausgezeichnet.
HDave

96

Ich habe in der Vergangenheit sicherlich über Maven gebissen und gestöhnt . Aber jetzt wäre ich nicht ohne. Ich bin der Meinung, dass die Vorteile die Probleme bei weitem überwiegen. Hauptsächlich:

  • Standardisierte Projektstruktur.
    • Angesichts eines neuen Entwicklers, der sich einem Projekt anschließt:
      • Wenn Sie sagen, dass es sich um ein Maven-Projekt handelt, kennt der Entwickler das Projektlayout und weiß, wie das Projekt erstellt und verpackt wird
      • Wenn Sie sagen, dass es sich um ein Ant-Projekt handelt, muss der Entwickler warten, bis Sie mehr erklären, oder er muss die build.xml durchgehen, um die Dinge herauszufinden.
    • Natürlich ist es mit Ant immer möglich, einen unternehmensweiten Standard durchzusetzen, aber ich denke, meistens werden Sie das sprichwörtliche Rad neu erfinden.
  • Abhängigkeitsmanagement.
    • Nicht nur mit externen Bibliotheken, sondern auch mit internen Bibliotheken / Modulen. Stellen Sie sicher, dass Sie einen Maven-Repository-Proxyserver wie Nexus oder Artifactory verwenden .
    • Es ist möglich, etwas davon mit Ivy zu machen . Wenn Sie lediglich ein Abhängigkeitsmanagement benötigen, ist es wahrscheinlich besser, Ivy zu verwenden.
  • Besonders innerhalb eines Projekts. Ich fand es sehr nützlich, kleine Teilprojekte auszubrechen, und Maven handhabt dies gut. Mit Ameisen ist es viel schwieriger.
  • Standardisiertes Artefaktmanagement (insbesondere in Verbindung mit Nexus oder Artifactory )
  • Das Release-Plugin ist wunderbar.
  • Die Integration von Eclipse & NetBeans ist recht gut.
  • Die Integration mit Hudson ist hervorragend. Besonders die Trendgraphen für Dinge wie Findbugs.
  • Es ist ein kleiner Punkt, aber die Tatsache, dass Maven standardmäßig Details wie die Versionsnummer in das Glas oder den Krieg einbettet (nicht nur im Dateinamen), ist enorm hilfreich.

Die Nachteile für mich sind hauptsächlich:

  • Die Befehlszeile ist nicht hilfreich. Das hat mich anfangs sehr abgeschreckt.
  • Das XML-Format ist sehr ausführlich. Ich kann sehen, warum es so gemacht wurde, aber es ist immer noch ein Schmerz zu lesen.
    • Das heißt, es hat eine XSD für die einfache Bearbeitung in einer IDE.
  • Am Anfang ist es schwierig, den Kopf herumzukriegen. Dinge wie zum Beispiel der Lebenszyklus.

Ich glaube wirklich, dass es sich lohnt, ein bisschen Zeit damit zu verbringen, Maven kennenzulernen.


2
Das XML-Format (Eclipse kann sich um die meisten mühsamen Teile kümmern) macht mir nichts aus, und Bauanweisungen für große Projekte sind in der Regel ohnehin unangenehm und komplex. Zum Beispiel haben Sie Ihren Kopf nicht wirklich gegen eine Mauer geschlagen, bis Sie versucht haben, GNU automake dazu zu bringen, etwas zu tun, das ihm egal ist ...
Donal Fellows

2
IntelliJ hat auch eine hervorragende Maven-Unterstützung.
Steven Benitez

1
Oh schau eine vernünftige Antwort mit Details.
Tim O'Brien

80

Meine praktische Erfahrung aus zwei großen Projekten ist, dass wir für jedes Projekt 1000 bis 1500 Stunden für Probleme im Zusammenhang mit Maven aufgewendet haben, ausgenommen 500 Stunden für den Wechsel von Maven 1 zu Maven 2.

Seitdem muss ich sagen, dass ich Maven absolut hasse. Ich bin frustriert, wenn ich darüber nachdenke.

Die Eclipse-Integration ist schrecklich. (Wir hatten zum Beispiel endlose Probleme mit der Codegenerierung, bei denen Eclipse nicht mehr mit dem generierten Code synchronisiert wurde und häufig eine vollständige Neuerstellung erforderlich war. Die Schuld liegt sowohl bei Maven als auch bei Eclipse, aber Eclipse ist nützlicher als Maven und sagt Emacs Eclipse bleibt und Maven müssen gehen.)

Wir hatten viele Abhängigkeiten, und wie wir festgestellt haben, werden Syntaxfehler häufig in öffentlichen Maven-Repositorys gespeichert, was Stunden Ihrer wertvollen Zeit ruinieren kann. Jede Woche. Die Problemumgehung besteht darin, einen Proxy oder ein lokal gesteuertes Repository zu haben, und es hat auch einige Zeit gedauert, bis alles richtig war.

Die Mavens-Projektstruktur ist für die Entwicklung mit Eclipse nicht wirklich geeignet, und die Erstellungszeit in Eclipse erhöht sich.

Als Folge des Problems der Codegenerierung und -synchronisierung mussten wir ziemlich oft von Scrach neu erstellen und Ihren Code- / Kompilierungs- / Testzyklus auf einen endlosen Kompilierungs- / Websurf- / Schlaf- / Die- / Code-Zyklus reduzieren, der Sie direkt in die 90er und 90er Jahre zurückversetzte 40 Minuten Kompilierungszeiten.

Die einzige Entschuldigung für Maven ist die Abhängigkeitsauflösung, aber ich würde das gerne ab und zu tun, nicht in jedem Build.

Zusammenfassend ist Maven so weit wie möglich von KISS entfernt. Und außerdem sind Anwälte in der Regel die Art von Menschen, die an ihrem Geburtstag extra feiern, wenn ihr Alter eine Primzahl ist. Fühlen Sie sich frei, mich abzustimmen :-)


3
Ich stimme einigen Ihrer Aussagen zu, obwohl ich glaube, dass ich es endlich richtig verstanden habe. Um das zu bekommen, was Sie wollen, können Sie sich Ivy ansehen, haben es noch nicht ausprobiert, aber es scheint das Abhängigkeitsmanagement in eine strukturiertere Ant-Umgebung zu bringen.
Newtopian

5
Hast du eine gute Alternative zu Maven gefunden?
Thilo

4
Die Eclipse-Integration ist immer noch schrecklich. Trotz aktueller Plugins gibt es Plugin-gesteuerte Maven-Tasks, die mit undurchsichtigen Fehlermeldungen fehlschlagen. Kollegen sagen mir dann, ich soll zu einer Befehlsshell gehen und denselben Befehl ausführen ... dann funktioniert es auf mysteriöse Weise. Eclipse ist eine ausgereifte Umgebung, das Maven-Plugin bleibt weit zurück.
Carl Smotricz

2
Es gibt einen grundlegenden Unterschied, wie Maven und Eclipse definieren, was ein Projekt ist. In Maven ist ein Projekt mehr oder weniger eine bequeme Möglichkeit, den Quellcode zu organisieren. Eclipse wurde ursprünglich so konzipiert, dass Sie gleichzeitig an einem oder mehreren mehr oder weniger unabhängigen Projekten arbeiten können. Spätere (nicht immer solide) Anforderungen führen dazu, dass IBM Projekte als "Module" missbraucht, mit denen Eclipse eigentlich ziemlich schlecht umgeht. Um die Definitionen zu konvergieren, sollten Maven-Projekte in vielen Fällen wahrscheinlich Eclipse-Quellordnern zugeordnet werden. Da Maven jedoch saugen ist, warum sollte er sich die Mühe machen?
KarlP

3
Hallo! Ich beklage die Tatsache, dass ich das nächste Mal 29 Jahre alt sein werde und das nächste perfekte Würfelalter 64 Jahre und mein letztes perfektes Penteraktalter 32 Jahre sein werde ... aber ich befürworte Maven nicht aktiv.
Cwallenpoole

46

Maven ist großartig. Der Grund für seinen Ruf hat meiner Meinung nach mit der steilen Lernkurve zu tun. (was ich endlich kurz davor bin, darüber hinwegzukommen)

Die Dokumentation ist etwas rau, einfach weil es sich anfühlt, als gäbe es viel Text und neue Dinge zu verstehen, bevor es Sinn macht. Ich sage, Zeit ist alles, was Maven braucht, um mehr gelobt zu werden.


6
Dies mag etwas zutreffen, aber ich habe festgestellt, dass die Verwendung der Maven-Integration mit Eclipse wirklich dazu beiträgt, die Lernkurve für die Leute zu verkürzen. m2eclipse.codehaus.org
Taylor Leese

2
@ Taylor, ich hatte viele Probleme mit dem Plug-In, besonders wenn Sie eine andere Version von Eclipse verwenden oder RAD vom Himmel verbieten. Ich denke, es kommt jedoch an ...
Dan

Ich habe es nur mit Eclipse 3.3, 3.4 und JBoss Developer Studio verwendet und war mir einig, dass es einige kleinere Probleme gibt (wie der POM-Editor, der nicht gut spielt), aber ich hatte keine größeren Probleme.
Taylor Leese

10
Es ist nicht die Lernkurve, die mich stört. Es ist wirklich nicht so schwer zu verstehen. Mein Problem ist, dass Sie bei großen (kommerziellen) Projekten viel weniger Wert erhalten als der Aufwand. OK, Ihre Projekte werden erstellt. Cool, aber die Kosten für ein Mannjahr, ständige Build-Fehler aufgrund externer Faktoren, 10-minütige Kompilierungen anstelle von 5 Sekunden und ein hässlicher Eclipse-Arbeitsbereich sind es einfach nicht wert. Außerdem können Sie für die gleichen Kosten mehr oder weniger einen Mann einstellen, der ständig den Kofferraum manuell baut.
KarlP

8
@Karlp - Nun, Sie verstehen es noch nicht vollständig ... 1.) "Fehler aufgrund externer Faktoren" - Sie sollten ein Projekt-Repository erstellen, in dem Sie alle Ihre Abhängigkeiten behalten und dessen Versionen Sie steuern. 2.) "10-minütige Kompilierung statt 5 Sekunden" - möglicherweise für die Erstinstallation und den ersten Build von Maven - Maven lädt alle benötigten Abhängigkeiten sowie Ihr Projekt herunter - aber regelmäßige Builds, die Sie ausführen, um Ihren eigenen Code zu erstellen, sollten dies nicht tun herunterladen - siehe 1 - auch Offline-Modus. 3.) "hässlicher Eclipse-Arbeitsbereich" - Maven funktioniert in allen wichtigen IDEs (NB, IntelliJ) und über die Befehlszeile.
Nate

24

Weil Maven ein Mittel ist, um erwachsene Männer auf schluchzende Massen absoluten Terrors zu reduzieren.


3
Wir sollten es in Massenproduktion herstellen und es mit großem Gewinn an alle Bösewichte verkaufen!
Joachim Sauer

7
Nein! Maven kann nicht für Profit verwendet werden. Es kann nur für das Böse verwendet werden.
Apocalisp

18

Vorteile:

  • Abhängigkeitsmanagement. Seit einigen Jahren laden meine Mitarbeiter und ich Abhängigkeiten nicht mehr manuell herunter und verwalten sie nicht mehr. Dies spart viel Zeit.
  • IDE-Unabhängigkeit. Es stellt sich heraus, dass alle wichtigen IDEs, Eclipse, IDEA und NetBeans eine angemessene Unterstützung für Maven-Projekte haben, sodass unsere Entwickler nicht an eine bestimmte IDE gebunden sind.
  • Befehlszeile. Mit Maven ist die Unterstützung gleichzeitiger IDE- und Befehlszeilenkonfigurationen unkompliziert, was für eine kontinuierliche Integration gut ist.

Nachteile:

  • Müssen in das Lernen von Maven investieren. Nun, ich muss es tun. Gute Nachrichten, nicht jeder im Team muss lernen.
  • Dokumentation. Früher war es ein Problem, jetzt ist die Situation dank Sonatype und ihrem Buch ( http://www.sonatype.com/products/maven/documentation/book-defguide ) viel besser.
  • Starrheit. Es ist manchmal herausfordernd und frustrierend, Dinge so zu tun, wie Sie es möchten. Mein Rat wäre, nicht zu kämpfen und Maven dazu zu bringen, Dinge zu tun, die es am besten kann, unkomplizierte Builds oder wenn ein stabiles Mojo verfügbar ist. In anderen Fällen brechen wir ab und erledigen Dinge entweder mit Ant-Tasks ( http://maven.apache.org/plugins/maven-antrun-plugin/ ) oder mit externen Programmen. Mein persönlicher Favorit ist Groovy Plugun ( http://groovy.codehaus.org/GMaven ).

Wettbewerb:

  • Ant: hat kein Abhängigkeitsmanagement. Zeitraum.
  • Ivy: immer noch weniger ausgereift als Maven (nicht, dass dieser auch keine Macken hat). Fast der gleiche Funktionsumfang, also kein zwingender Grund, sich zu bewegen. Ich habe mehrere Versuche unternommen, es zu versuchen. alles erfolglos.

Fazit: Alle unsere Projekte werden bereits seit mehreren Jahren mit Maven durchgeführt.


3
Ant konkurriert nicht mit Maven. Ivy konkurriert nicht mit Maven (es konkurriert mit Maven Ant-Aufgaben). Maven ist mehr als ein Build-Tool + Abhängigkeitsmanagement. Zeitraum.
Pascal Thivent

18

Ich denke, es hat einen schlechten Ruf bei Leuten, die die einfachsten und kompliziertesten Projekte haben.

Wenn Sie eine einzelne WAR aus einer einzelnen Codebasis erstellen, müssen Sie Ihre Projektstruktur verschieben und die zwei von drei Jars manuell in der POM-Datei auflisten.

Wenn Sie eine EAR aus einem Satz von neun EAR-Dateiprototypen mit einer Kombination aus fünf WAR-Dateien, drei EJBs und 17 anderen Tools, Abhängigkeitsgläsern und Konfigurationen erstellen, bei denen MANIFEST.MF- und XML-Dateien in vorhandenen Ressourcen während der endgültigen Erstellung angepasst werden müssen; dann ist Maven wahrscheinlich zu einschränkend. Ein solches Projekt wird zu einem Durcheinander komplizierter verschachtelter Profile, Eigenschaftendateien und des Missbrauchs der Maven-Build-Ziele und der Klassifikatorbezeichnung.

Wenn Sie sich also in den unteren 10% der Komplexitätskurve befinden, ist dies ein Overkill. Bei den oberen 10% dieser Kurve befinden Sie sich in einer Zwangsjacke.

Mavens Wachstum ist darauf zurückzuführen, dass es für die mittleren 80% gut funktioniert


16

Meine Erfahrung spiegelt die Frustration vieler Beiträge hier wider. Das Problem mit Maven ist, dass es die Details des Build-Managements in seinem Streben nach ultimativer automatischer Güte einschließt und verbirgt. Dies macht Sie fast hilflos, wenn es bricht.

Ich habe die Erfahrung gemacht, dass jedes Problem mit Maven schnell zu einer mehrstündigen Snipe-Jagd durch Netze verschachtelter XML-Dateien verkommen ist, ähnlich wie beim Wurzelkanal.

Ich habe auch in Geschäften gearbeitet, die sich stark auf Maven verlassen haben. Die Leute, die es mochten (die es für den Aspekt "Knopf drücken, alles erledigen" mochten), haben es nicht verstanden. Die Maven-Builds hatten eine Million automatische Ziele, was sicher nützlich wäre, wenn ich mir die Stunden nehmen würde, um zu lesen, was sie getan haben. Bessere 2 Ziele, die funktionieren und die Sie vollständig verstehen.

Vorbehalt: Zuletzt vor 2 Jahren mit Maven zusammengearbeitet, jetzt ist es vielleicht besser.


14

Wie Glenn glaube ich nicht, dass Maven einen schlechten Repräsentanten hat, sondern einen gemischten Repräsentanten. Ich habe 6 Monate lang ausschließlich versucht, ein ziemlich großes Projektprojekt nach Maven zu migrieren, und es zeigt deutlich die Grenzen des Tools.

Nach meiner Erfahrung ist Maven gut für:

  • externes Abhängigkeitsmanagement
  • Zentralisierte Verwaltung des Builds (POM-Vererbung)
  • viele Plugins für viele Dinge
  • Sehr gute Integration mit Tools für die kontinuierliche Integration
  • sehr gute Berichtsfunktionen (FindBugs, PMD, Checkstyle, Javadoc, ...)

Und es hat einige Probleme mit:

  • Alles oder nichts Ansatz (schwer langsam nach Maven zu migrieren)
  • komplexe Abhängigkeiten, Intermodulabhängigkeiten
  • zyklische Abhängigkeiten (Ich weiß, schlechtes Design, aber wir können 5 Jahre Entwicklungszeit nicht beheben ...)
  • Kohärenz (Versionsbereiche funktionieren nicht überall gleich)
  • Bugs (wieder mit Versionsbereichen)
  • reproduzierbare Builds (wenn Sie nicht die Versionsnummer aller Plugins festlegen, können Sie nicht sicher sein, dass Sie in 6 Monaten denselben Build erhalten)
  • Mangel an Dokumentation (das Dokument ist ziemlich gut für die Grundlagen, aber es gibt nicht viele Beispiele für den Umgang mit großen Projekten)

Um einen gewissen Kontext zu geben, arbeiten rund 30 Entwickler an diesem Projekt, und das Projekt gibt es seit mehr als 5 Jahren. Viel Vermächtnis, viele Prozesse sind bereits vorhanden, viele benutzerdefinierte proprietäre Tools sind bereits vorhanden. Wir haben uns für eine Migration nach Maven entschieden, da die Kosten für die Wartung unserer proprietären Tools zu hoch wurden.


12

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.


11

Es verdient den Ruf, den es hat. Nicht jeder braucht die starre Struktur, die die Entwickler von Maven für jedes einzelne Projekt für angemessen hielten. Es ist so unflexibel. Und was für viele Menschen "Pro" ist, das Abhängigkeitsmanagement, ist meiner Meinung nach der größte "Nachteil". Ich bin absolut nicht zufrieden damit, dass Maven die Jars aus dem Netzwerk herunterladen und wegen Inkompatibilitäten den Schlaf verlieren (ja, der Offline-Modus existiert, aber warum sollte ich dann all diese Hunderte von XML-Dateien und Prüfsummen haben). Ich entscheide, welche Bibliotheken ich verwende, und viele Projekte haben ernsthafte Bedenken hinsichtlich Builds, die von der Netzwerkverbindung abhängen.

Schlimmer noch, wenn die Dinge nicht funktionieren, sind Sie absolut verloren. Die Dokumentation ist scheiße, die Community hat keine Ahnung.


4
Ich stimme dem zu. Ich denke, der Wert des Abhängigkeitsmanagements ist überbewertet. Sicher, es ist ordentlich, wenn alles funktioniert, aber es führt mehrere potenzielle Fehlerpunkte ein (ganz zu schweigen von potenziellen Sicherheitslücken). Sie können Ihren eigenen Repository-Server einrichten, um die Probleme etwas zu verringern, und die Versionsnummern sperren, um unerwartete Aktualisierungen zu vermeiden. Ich bevorzuge es jedoch, die Abhängigkeiten nur der Versionskontrolle hinzuzufügen, da sie sich nicht so oft ändern und eine wiederholbare Erstellung garantiert wird .
Dan Dyer

8

Ein Jahr später wollte ich dies aktualisieren: Ich habe diese Meinung über die Maven-Community nicht mehr. Ich würde diese Antwort nicht schreiben, wenn die Frage heute gestellt würde. Ich werde meine aktuelle Meinung als separate Antwort hinzufügen.


Dies ist eine sehr subjektive Antwort, aber die Frage bezieht sich auf Meinungen, also ...

Ich mag Maven und mag es besser, je mehr ich es kennenlerne. Eines wirkt sich jedoch auf meine Gefühle aus: Die Maven-Community konzentriert sich hauptsächlich auf Sonatype ("die Maven-Firma", in der viele der Maven-Honchos arbeiten), und Sonatype drängt seine Unternehmensprodukte ziemlich aggressiv auf die Community.

Ein Beispiel: Der Twitter-Stream "Maven Book" enthält Links zu einer angeblichen Einführung in die Repository-Verwaltung .

Sorry, aber dieses "Intro" ist für Nexus halb Information, halb Verkaufsargument. Pop Quiz: Gibt es neben Nexus und Nexus Pro noch andere Repo-Manager? Was hat das auch mit dem angeblich Open-Source-Maven-Buch zu tun? Oh, richtig, das Kapitel über die Repository-Verwaltung wurde in ein separates Buch über Nexus ausgegliedert. Huh. Wenn ich zum Maven-Buch beitrage, erhalte ich eine Überweisungsgebühr, wenn ich den Nexus-Umsatz erhöhe?

Stellen Sie sich vor, Sie würden an einem Java-Entwicklungsforum teilnehmen und es wäre klar, dass die Sun-Mitarbeiter, die über Java diskutieren, jede mögliche Gelegenheit nutzen würden, um über NetBeans und "NetBeans Pro" zu sprechen. Nach einer Weile verliert es etwas von seinem Gemeinschaftsgefühl. Ich hatte noch nie eine solche Erfahrung mit Ant.

Trotzdem denke ich, dass Maven ein sehr interessantes und nützliches System (ich nenne es kein Tool wie Ant, Maven ist breiter als das) für die Konfiguration der Softwareentwicklung und das Build-Management ist. Das Abhängigkeitsmanagement ist manchmal ein Segen und ein Fluch, aber es ist erfrischend - und sicherlich nicht der einzige Vorteil, den Maven bietet. Ich reagiere wahrscheinlich etwas zu stark auf den Sonatype-Schilling, aber meiner Meinung nach tut es Maven durch Assoziation weh. Ich weiß nicht, ob diese Meinung von jemand anderem geteilt wird.


2
Zac, du weißt, ich habe mich gefragt, ob du mehr über Nexus Professional erfahren willst. :-)
Tim O'Brien

7

Ich denke, Maven bekommt einen schlechten Ruf, weil es Ihrem Projekt Struktur auferlegt, während andere Tools wie Ant es Ihnen ermöglichen, die Struktur vollständig zu definieren, wie Sie es wünschen. Ich stimmte auch zu, dass die Dokumentation schlecht ist, aber ich denke, in erster Linie ist der schlechte Ruf, den Maven bekommt, weil die Leute so an Ant gewöhnt sind.


2
Ich bin damit einverstanden, dass die Leute anfangs möglicherweise die Kontrolle verpassen, die sie mit Ant hatten, aber sobald ein Projekt die von Maven auferlegten Konventionen akzeptiert, werden sie wirklich einen Produktivitätsgewinn daraus sehen.
Taylor Leese

5
Nicht wahr, Maven ermöglicht es Ihnen, die Projektstruktur zu ändern. Es wird lediglich eine Struktur vorgeschlagen, die weit verbreitet ist.
adrian.tarau

3
Ich denke nicht, dass das wahr ist. Die meisten Beschwerden über Maven betreffen die Art und Weise, wie es fehlschlagen kann, wie langsam es ist oder die Dokumentation. Ich habe nie wirklich bemerkt, dass sich jemand über die Struktur beschwert hat.
Dan Dyer

@ Dan Dyer: Ich stimme dem zu. Die Struktur ist tatsächlich eines der wenigen guten Dinge, die Maven tut. Es ist alles andere, was Maven so schrecklich macht.
Carl Smotricz

6

Zu viel Magie.


3
Seien Sie genauer - was ist daran so magisch, dass es nicht dokumentiert ist?
Whaley

4
Es ist magisch, sobald Sie 2 Stunden lang im Internet suchen müssen, um herauszufinden, warum etwas nicht wie erwartet funktioniert. Wenn Sie ein bestimmtes Beispiel möchten: Warum wird mein Plugin nicht ausgeführt? Sie haben 2 Stunden.
Damien B

Wenn ich etwas tue, bei dem ich 2 Stunden lang nicht im Internet gesucht habe, werde ich misstrauisch, dass ich das falsche Tool für den Job verwende oder die Anforderungen stark missverstanden / unterschätzt habe.
Doug Moscrop

6

Weil sich unzufriedene Menschen beschweren, während zufriedene Menschen nicht sagen, dass sie zufrieden sind. Mein Punkt ist, dass es weitaus zufriedenere Maven-Benutzer als unzufriedene gibt, aber die später mehr Lärm machen. Dies ist auch ein allgemeines Muster aus dem wirklichen Leben (ISP, Telefonanbieter, Transporte usw. usw.).


5

Das wichtigste Problem für mich ist, dass Maven, wenn es nicht richtig konfiguriert ist, möglicherweise keine wiederholbaren Builds erzeugt, aus folgenden Gründen:

  • unzuverlässige Remote-Repositorys;
  • Abhängigkeiten von Plugins und Bibliotheken mit entweder SNAPSHOT-Versionen oder ohne Versionen.

Vergleichen Sie dies mit einem Ameisenbau, der - obwohl ausführlich und lästig IMO - funktioniert, da alle Gläser lokal eingecheckt werden.

Das Gute daran ist, dass die Probleme behoben werden können:

  • Verwenden Sie Ihr eigenes Maven-Repository, das kinderleicht geworden ist. Ich verwende Archiva mit guten Ergebnissen.
  • Versionieren Sie Ihre Abhängigkeiten immer richtig. Maven hat damit begonnen, Plugin-Versionen im Super-POM ab 2.0.8 oder 2.0.9 zu sperren, und alle Ihre Abhängigkeiten sollten von freigegebenen Versionen sein.

+1 für die Verknüpfung mit einer alternativen Repository-Implementierung.
Donal Fellows

5

tolle Idee - schlechte Umsetzung.

Ich habe kürzlich ein Projekt von Ant nach Maven verlegt. Am Ende hat es gut funktioniert, aber ich musste zwei verschiedene Versionen von Maven-Assembly-Plugin und Maven-Jar-Plugin im selben Pom verwenden (zwei Profile), weil das, was in einer Version funktionierte, in einer anderen kaputt war.

Es waren also ziemlich Kopfschmerzen. Die Dokumentation ist nicht immer großartig, aber ich muss zugeben, dass es relativ einfach war, Antworten zu googeln.

Stellen Sie sicher, dass Sie immer Versionen der von Ihnen verwendeten Stecker angeben. Erwarten Sie nicht, dass die neue Version abwärtskompatibel ist.

Ich denke, Kontroversen entstehen durch die Tatsache, dass sich Maven immer noch weiterentwickelt und der Prozess manchmal schmerzhaft ist.

Grüße

v.


Ich stimme zu, dass die Idee besser ist als die Ausführung. Es ist keine kleine Aufgabe, die sie zu ihrer Verteidigung gewählt haben, aber ich frage mich regelmäßig, ob die Dinge nicht einfacher hätten erledigt werden können.
Eelco

5

Ich mag Maven. Ich habe es seit vor 1.0 verwendet. Es ist ein leistungsstarkes Tool, das mir insgesamt viel Zeit gespart und meine Entwicklungsinfrastruktur verbessert hat. Aber ich kann die Frustration verstehen, die manche Menschen haben. Ich sehe 3 Arten von Frustration:

  1. wo die Ursachen echte Bedenken sind (z. B. ausführliche POMs, fehlende Dokumentation),
  2. Einige sind Fehlinformationen (z. B. "Sie müssen eine Internetverbindung haben, um aufzubauen" - nicht wahr - nicht, dies kann vermieden werden),
  3. Einiges davon wird bei Maven abgelassen, aber wirklich jemand anderes ist schuld ("Schieß nicht auf den Boten").

Für den ersten Fall echte Probleme - na ja, es gibt Probleme, POMs sind ausführlich, die Dokumentation könnte besser sein. Trotzdem ist es möglich, mit maven in kurzer Zeit gute Ergebnisse zu erzielen. Ich erschrecke jedes Mal, wenn ich ein mit Ameise erstelltes Projekt bekomme, und versuche, dies in meine IDE zu importieren. Das Einrichten der Verzeichnisstruktur kann lange dauern. Mit Maven müssen nur die POM-Dateien in der IDE geöffnet werden.

Für den zweiten Fall ist Maven komplex und Missverständnisse sind an der Tagesordnung. Wenn Maven 3 einen Weg finden kann, diese Komplexität (oder sogar die wahrgenommene Komplexität) anzugehen, wäre das gut. Maven ist eine beträchtliche Investition, aber meiner Erfahrung nach macht sich die Investition schnell bezahlt.

Für den letzten Punkt denke ich, dass die Beschwerde über die transitiven Abhängigkeiten von Maven wahrscheinlich das bekannteste Beispiel ist.

Transitive Abhängigkeiten sind die Natur realer Software, die wiederverwendet wird. Windows-DLLs, Debian-Pakete, Java-Pakete, OSGi-Pakete und sogar C ++ - Header-Dateien enthalten Abhängigkeiten und leiden unter dem Abhängigkeitsproblem. Wenn Sie zwei Abhängigkeiten haben und jede eine andere Version derselben Sache verwendet, müssen Sie versuchen, dies irgendwie zu beheben. Maven versucht nicht, das Abhängigkeitsproblem zu lösen, sondern stellt es in den Vordergrund und bietet Tools zur Verwaltung des Problems, z. B. durch das Melden von Konflikten und das Bereitstellen konsistenter Abhängigkeiten für eine Hierarchie von Projekten, und bietet tatsächlich die absolute Kontrolle darüber die Abhängigkeiten eines Projekts.

Der Ansatz, Abhängigkeiten manuell in jedes Projekt einzubeziehen (ein Poster besagt, dass er alle Abhängigkeiten in die Quellcodeverwaltung eincheckt), birgt das Risiko, dass die falsche Abhängigkeit verwendet wird, z. B. übersehene Aktualisierungen, wenn eine Bibliothek aktualisiert wird, ohne Aktualisierungen für ihre Abhängigkeiten einzuchecken. Bei einem Projekt jeder Größe führt das manuelle Verwalten von Abhängigkeiten mit Sicherheit zu Fehlern. Mit maven können Sie die von Ihnen verwendete Bibliotheksversion aktualisieren und die richtigen Abhängigkeiten einbeziehen. Für das Änderungsmanagement können Sie den alten Satz von Abhängigkeiten (für Ihr gesamtes Projekt) mit dem neuen Satz vergleichen, und alle Änderungen können sorgfältig geprüft, getestet usw. werden.

Maven ist nicht die Ursache für das Abhängigkeitsproblem, macht es jedoch sichtbarer. Bei der Lösung von Abhängigkeitsproblemen macht maven alle "Optimierungen" von Abhängigkeiten explizit (eine Änderung an Ihrem POM, die die Abhängigkeit überschreibt) und nicht implizit, wie dies bei manuell verwalteten Jars in der Versionskontrolle der Fall ist, bei denen die Jars einfach vorhanden sind und nichts zu tun haben Unterstützungswetter sind sie die richtige Abhängigkeit oder nicht.


5

Ich glaube, dass Maven einen schlechten Ruf hat, weil die meisten Kritiker die Kombination von Maven + Hudson + Sonar nicht beobachtet haben . Wenn ja, würden sie fragen: "Wie fange ich an?"


+1 für die Erwähnung von Sonar.
Donal Fellows

1
Ich habe es gesehen. Es gibt noch keinen Grund, Maven zu verwenden. Hudson und Sonar brauchen keinen Maven.
rk2010

5

Einige meiner Lieblingshüllen mit Maven:

  • Die XML-Definition ist sehr ungeschickt und ausführlich. Haben sie noch nie von Attributen gehört?

  • In der Standardkonfiguration durchsucht es bei jeder Operation immer das Netz. Unabhängig davon, ob dies für irgendetwas nützlich ist, sieht es äußerst albern aus, einen Internetzugang für "sauber" zu benötigen.

  • Wenn ich in der Standardeinstellung nicht darauf achte, genaue Versionsnummern anzugeben, werden die neuesten Updates aus dem Netz genommen, unabhängig davon, ob diese neuesten Versionen Abhängigkeitsfehler verursachen. Mit anderen Worten, Sie sind dem Abhängigkeitsmanagement anderer Menschen ausgeliefert.

  • Die Lösung für all diesen Netzwerkzugriff besteht darin, ihn durch Hinzufügen der -oOption zu deaktivieren. Aber Sie müssen daran denken, es auszuschalten, wenn Sie wirklich Abhängigkeitsaktualisierungen durchführen möchten!

  • Eine andere Lösung besteht darin, einen eigenen "Versionsverwaltungs" -Server für Abhängigkeiten zu installieren. Überraschung: Die meisten Projekte haben bereits eine Quellcodeverwaltung, nur das funktioniert ohne zusätzliches Setup!

  • Maven Builds sind unglaublich langsam. Das Fummeln mit Netzwerkupdates erleichtert dies, aber Maven-Builds sind immer noch langsam. Und schrecklich wortreich.

  • Das Maven-Plugin (M2Eclipse) lässt sich am schlechtesten in Eclipse integrieren. Eclipse lässt sich relativ reibungslos in die Versionskontrollsoftware und in Ant integrieren. Die Maven-Integration ist im Vergleich sehr klobig und hässlich. Habe ich langsam erwähnt?

  • Maven ist weiterhin fehlerhaft. Fehlermeldungen sind nicht hilfreich. Zu viele Entwickler leiden darunter.


2
Ich habe Maven noch nie dazu gebracht, das Neueste aus einer Abhängigkeit herauszuholen, es sei denn, ich habe eine SNAPSHOT-Abhängigkeit verwendet oder eine neue Funktion hinzugefügt, für die etwas erforderlich war. Wenn ich nach Version 1.2.3 frage und 1.2.3 in meinem lokalen Repository habe, erhalte ich 1.2.3 nicht mehr.
Mike Cornell

1
Sie kontrollieren Ihre direkten Abhängigkeiten, ja. Wer kontrolliert die Abhängigkeiten Ihrer Abhängigkeiten?
Carl Smotricz

Für Ihren ersten Punkt, über Attribute, die in der kommenden Zeit angesprochen werden sollen (für eine lange Zeit werde ich jetzt zugeben) Maven 3.
Mezmo

@mezmo: Das wäre sehr willkommen. Danke für die Information!
Carl Smotricz

4

Gute Frage. Ich habe gerade ein großes Projekt bei der Arbeit gestartet und ein Teil früherer Projekte bestand darin, Modularität in unsere Codebasis einzuführen.

Ich habe schlechte Dinge über Maven gehört. Tatsächlich ist es alles, was ich jemals darüber gehört habe. Ich habe mir überlegt, es einzuführen, um den Albtraum der Abhängigkeit zu lösen, den wir gerade erleben. Das Problem, das ich bei Maven gesehen habe, ist, dass es in seiner Struktur ziemlich starr ist, dh Sie müssen sich an das Projektlayout anpassen, damit es für Sie funktioniert.

Ich weiß, was die meisten Leute sagen werden - Sie müssen sich nicht an die Struktur anpassen. Das stimmt zwar, aber Sie werden es erst wissen, wenn Sie die anfängliche Lernkurve hinter sich haben. Zu diesem Zeitpunkt haben Sie zu viel Zeit investiert, um alles wegzuwerfen.

Ameise wird heutzutage viel benutzt und ich liebe es. In Anbetracht dessen stieß ich auf einen wenig bekannten Abhängigkeitsmanager namens Apache Ivy . Ivy lässt sich sehr gut in Ant integrieren und es ist schnell und einfach, grundlegende Einstellungen für den JAR-Abruf vorzunehmen und zu funktionieren. Ein weiterer Vorteil von Ivy ist, dass es sehr leistungsfähig und dennoch ziemlich transparent ist. Sie können Builds ganz einfach mit Mechanismen wie scp oder ssh übertragen. Abrufen von Kettenabhängigkeiten über Dateisysteme oder Remote-Repositorys (Maven-Repo-Kompatibilität ist eine der beliebtesten Funktionen).

Trotzdem fand ich es am Ende sehr frustrierend, es zu verwenden - die Dokumentation ist reichlich, aber sie ist in schlechtem Englisch geschrieben, was zu Frustration beim Debuggen oder beim Versuch, herauszufinden, was schief gelaufen ist, beitragen kann.

Ich werde Apache Ivy irgendwann während dieses Projekts erneut besuchen und hoffe, dass es richtig funktioniert. Eine Sache, die es getan hat, war, uns als Team zu ermöglichen, herauszufinden, von welchen Bibliotheken wir abhängig sind, und eine dokumentierte Liste zu erhalten.

Letztendlich denke ich, dass alles darauf ankommt, wie Sie als Einzelperson / Team arbeiten und was Sie zur Lösung Ihrer Abhängigkeitsprobleme benötigen.

Die folgenden Ressourcen zu Ivy sind möglicherweise hilfreich:


1
Ivy konkurriert nicht mit Maven (vielleicht mit Maven Ant Tasks, aber nicht mit Maven).
Pascal Thivent

1
Ivy konkurriert nicht mit Maven Ant Tasks, sondern mit Maven Dependency Management.
Damien B

@atc Das war genau richtig !! : "Ich weiß, was die meisten Leute sagen werden - Sie müssen sich nicht an die Struktur anpassen. Das stimmt zwar, aber Sie werden es erst wissen, wenn Sie die anfängliche Lernkurve überschritten haben und zu diesem Zeitpunkt zu viel Zeit investiert haben alles wegwerfen. "
rk2010

4

Ich liebe Maven - es steigert die Produktivität und ich bin sehr froh, dass ich Ant nicht mehr benutze (Puh!)

Aber wenn ich etwas ändern könnte, wäre es:

  1. Machen Sie die pom.xmlDatei weniger ausführlich
  2. Erleichtern Sie das Einfügen von .jars, die nicht aus dem Repository stammen.

1
Ich denke, Maven-Benutzer wären besser bedient, wenn die IDEs den Import fehlender oder von Drittanbietern stammender Jars in die lokalen Repositorys ermöglichen würden. Wie schwer wäre es, ein Dialogfeld "Pick the Jar Click Import" zu haben?
Sal

@sal Ich vermute, dass Maven keine Praxis fördern möchte, die die Portabilität beeinträchtigt.
Pascal Thivent

1
Ich halte die Tatsache, dass es schwierig ist, Gläser von zufälligen Stellen hinzuzufügen, für eine Stärke. Wenn Sie sich in einer Teamumgebung befinden und ein ungerades Glas verwenden müssen, sollten Sie dieses Glas für das Maven-Repo Ihres Teams bereitstellen. Auf diese Weise führen der Rest des Teams und Ihre CI-Server den gleichen Build durch. Jeder, der den gleichen Build ausführt, ist eine Grundlage der Maven-Philosophie.
Tunaranch

+1 für das Glas Ding. Das Mitbringen eigener vorgefertigter Gläser (aus irgendeinem Grund) ist ein unnötiger Schmerz.
Thorbjørn Ravn Andersen

@tunaranch persönlich Ich mag es, dass entweder Sachen in Maven Central sind oder (Gläser und alles) in dem, was aus der Versionskontrolle ausgecheckt wird. Grundsätzlich möchte ich in der Lage sein, mein Git-Repository auf ein USB-Laufwerk zu bringen, es zu überprüfen, "mvn clean install" auszuführen und zum Mittagessen zu gehen und einsatzbereit zu sein.
Thorbjørn Ravn Andersen

4

Es gibt viele Gründe, warum Menschen Maven nicht mögen, aber seien wir ehrlich, sie sind sehr subjektiv . Maven ist heute mit einigen guten (und kostenlosen) Büchern, einer besseren Dokumentation, einem größeren Satz von Plugins und vielen referenziell erfolgreichen Projekt-Builds nicht mehr derselbe Maven wie vor ein oder zwei Jahren.

Die Verwendung von Maven in einfachen Projekten ist sehr einfach. Bei größeren / komplizierten Projekten ist mehr Wissen und ein tieferes Verständnis der Maven-Philosophie erforderlich - möglicherweise auf Unternehmensebene eine Position für Maven-Guru wie Netzwerkadministrator. Hauptquelle für Maven-Hassaussagen ist oft Unwissenheit .

Ein weiteres Problem für Maven ist mangelnde Flexibilität wie z. B. bei Ant. Aber denken Sie daran, Maven hat eine Reihe von Konventionen - sich an diese zu halten, scheint am Anfang schwierig zu sein, aber am Ende oft vor Problemen zu schützen.

Der aktuelle Erfolg von Maven beweist seinen Wert. Natürlich ist niemand perfekt und Maven hat einige Nachteile und seine Macken, aber meiner Meinung nach wiegt Maven langsam seine Gegner.


@Pascal. Bei Problemen mit Maven gibt es einen Stackoverflow und Sie hier :)
cetnar

3

Ich würde nicht sagen, dass es einen schlechten Repräsentanten hat, sondern einen gemischten Repräsentanten. Wenn Ihr Projekt dem von Maven vertretenen Paradigma "Konvention über Konfiguration" folgt, können Sie viel davon nutzen. Wenn Ihr Projekt nicht gut in Mavens Weltbild passt, kann es zu einer Belastung werden.

Wenn Sie die Kontrolle über das Projekt haben, ist Maven möglicherweise der richtige Weg. Aber wenn Sie dies nicht tun und das Layout von jemandem bestimmt wird, der kein Fan von Maven ist, kann es mehr Probleme geben, als es wert ist. Die glücklichsten Maven-Projekte sind wahrscheinlich diejenigen, die als Maven-Projekte begonnen haben.


"Ich würde nicht sagen, dass es einen schlechten Repräsentanten hat, sondern einen gemischten Repräsentanten" - ich würde sagen, das ist wahrscheinlich genauer, nur negative Meinungen stechen eher hervor.
Dan

Ich bin damit einverstanden, dass die Portierung eines Projekts nach Maven experimentell im Verhältnis zur Projektgröße schwieriger wird (größeres zu importierendes Projekt = schwierigerer Import). Die Verwendung von Maven zum Starten eines Projekts ist der beste Ansatz zur Verwendung von Maven. Sonst ist es vielleicht nicht die Mühe wert.
Luigimax

3

Für mich gibt es so viele Vor- und Nachteile wie die Verwendung von Maven vs Ant für interne Projekte. Ich denke jedoch, dass Maven bei Open Source-Projekten einen großen Einfluss darauf hatte, dass viele Projekte viel einfacher zu erstellen sind. Es ist noch nicht allzu lange her, dass es Stunden gedauert hat, bis ein durchschnittliches OSS Java-Projekt (auf Ameisenbasis) kompiliert wurde, eine Menge Variablen festgelegt werden musste, abhängige Projekte heruntergeladen wurden usw.

Sie können mit Maven alles machen, was Sie mit Ant machen können, aber wo Ant keine Standards fördert, empfiehlt Maven dringend, dass Sie seiner Struktur folgen, sonst wird es mehr Arbeit sein. Es stimmt, einige Dinge sind mit Maven mühsam einzurichten, was mit Ant einfach zu tun wäre, aber das Endergebnis ist fast immer etwas, das aus der Sicht von Leuten, die sich nur ein Projekt ansehen und loslegen möchten, einfacher zu erstellen ist.


3

Wenn Sie Ihr Unternehmen oder Ihren Job auf ein Entwicklungsprojekt setzen möchten, möchten Sie die Kontrolle über die Grundlagen haben - dh über das Build-System. Mit Maven haben Sie nicht die Kontrolle. Es ist deklarativ und undurchsichtig. Die Entwickler von Maven-Frameworks haben keine Ahnung, wie sie ein transparentes oder intuitives System erstellen sollen. Dies geht aus der Protokollausgabe und der Dokumentation hervor.

Das Abhängigkeitsmanagement ist sehr verlockend, da es Ihnen einige Zeit zu Beginn des Projekts gleich sein könnte, aber seien Sie gewarnt, es ist grundlegend kaputt und wird Ihnen schließlich viele Kopfschmerzen bereiten. Wenn zwei Abhängigkeiten inkompatible vorübergehende Abhängigkeiten aufweisen, werden Sie durch das Komplexitätsnest einer Ratte blockiert, das den Build für Ihr gesamtes Team unterbricht und die Entwicklung für Tage blockiert. Der Erstellungsprozess mit Maven ist für verschiedene Entwickler in Ihrem Team aufgrund inkonsistenter Zustände ihrer lokalen Repositorys ebenfalls notorisch inkonsistent. Je nachdem, wann ein Entwickler seine Umgebung erstellt hat oder an welchen anderen Projekten er arbeitet, werden unterschiedliche Ergebnisse erzielt. Sie werden feststellen, dass Sie Ihr gesamtes lokales Repository löschen und Maven-Jars weitaus häufiger erneut herunterladen lassen als beim ersten Setup für einen Entwicklungszweig. Ich glaube, OSGI ist eine Initiative, die versucht, dieses grundlegende Problem zu beheben. Ich würde sagen, wenn vielleicht etwas so komplex sein muss, ist die grundlegende Prämisse falsch.

Ich bin seit über 5 Jahren ein Maven-Benutzer / Opfer und ich muss sagen, dass Sie dadurch viel mehr Zeit sparen, wenn Sie nur Ihre Abhängigkeiten in Ihr Quell-Repository einchecken und nette und einfache Ameisen-Aufgaben schreiben. Mit ant wissen Sie genau, was Ihr Build-System tut.

Ich habe viele, viele Wochen verlorener Menschen in verschiedenen Unternehmen aufgrund von Maven-Problemen erlebt.

Ich habe kürzlich versucht, ein altes GWT / Maven / Eclipse-Projekt wieder zum Leben zu erwecken, und 2 Wochen meiner gesamten Freizeit später kann ich es immer noch nicht konsequent aufbauen. Es ist Zeit, meine Verluste zu reduzieren und mich mit Ant / Eclipse zu entwickeln, denkt ich ...


3

Die kurze Antwort: Ich fand es sehr schwierig, ein Maven-Build-System zu warten, und ich möchte so schnell wie möglich zu Gradle wechseln.

Ich arbeite seit über vier Jahren mit Maven. Ich würde mich als Experte für Build-Systeme bezeichnen, da ich in den letzten (mindestens) fünf Unternehmen, in denen ich tätig war, die Build / Deploy-Infrastruktur grundlegend renoviert habe.

Einige der Lektionen, die ich gelernt habe:

  • Die meisten Entwickler verbringen nicht viel Zeit damit, über Build-Systeme nachzudenken. Infolgedessen verwandelt sich der Build in ein Spaghetti-Durcheinander von Hacks, aber sie wissen es zu schätzen, wenn dieses Durcheinander aufgeräumt und rationalisiert wird.
  • Im Umgang mit Komplexität hätte ich lieber ein transparentes System, das die Komplexität aufdeckt (wie Ant), als eines, das versucht, komplexe Dinge einfach zu machen, indem es starre Beschränkungen auferlegt, wie Maven. Denken Sie an Linux vs. Windows.
  • Maven hat viele Lücken in der Funktionalität, die byzantinische Problemumgehungen erfordern. Dies führt zu POM-Dateien, die unverständlich und nicht wartbar sind.
  • Ant ist superflexibel und verständlich, aber Ant-Dateien können auch ziemlich groß werden, weil sie so niedrig sind.
  • Für jedes wichtige Projekt müssen Entwickler ihre eigene Build / Deployment-Struktur erstellen, die über das hinausgeht, was das Tool bietet. Die Eignung der Struktur für das Projekt hat viel damit zu tun, wie einfach die Wartung ist. Die besten Werkzeuge unterstützen Sie beim Erstellen einer Struktur und bekämpfen Sie nicht.

Ich habe mich ein wenig mit Gradle befasst und es sieht so aus, als ob es das Potenzial hat, das Beste aus beiden Welten zu sein, was eine Mischung aus deklarativer und prozeduraler Build-Beschreibung ermöglicht.


3

Es ist komplizierter als die Sprache, in der Sie Ihr Projekt geschrieben haben. Die richtige Konfiguration ist schwieriger als die eigentliche Programmierung.


3

Ich habe mich durch die meisten / alle hier erwähnten Negative und ähnliche Einwände von Teamkollegen gekämpft und stimme ihnen allen zu. Aber ich habe es durchgehalten und werde es auch weiterhin tun, indem ich an dem einen Ziel festhalte, das nur Maven (oder Gradle vielleicht) wirklich erreicht.

Wenn Sie für Peers (Open Source- Entwickler ) optimieren , wird ant / make / was auch immer tun. Wenn Sie Funktionen für Nicht-Peers ( Benutzer ) bereitstellen, reicht nur maven / gradle / etc aus.

Nur mit maven können Sie ein kleines Bündel von Quellcode + Poms (keine eingebetteten lib / binären Abhängigkeitsgläser mit kryptischen Namen und keine Abhängigkeitsinformationen) mit einem gut dokumentierten Standardprojektlayout veröffentlichen, das von jeder IDE von jemandem geladen werden kann, der es nicht aufgenommen hat die eigenwilligen Layout-Konventionen der Entwickler. Und es gibt eine Ein-Knopf-Installationsprozedur (mvn install), die alles erstellt, während fehlende Abhängigkeiten erfasst werden.

Das Ergebnis ist eine einfache Rampe, der Benutzer folgen können, um ihren Weg in den Code zu finden, wo die Poms sie auf relevante Dokumentationen verweisen können.

Abgesehen von dieser (unverzichtbaren) Anforderung mag ich Maven nicht so sehr wie jeden anderen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.