Warum Maven? Was sind die Vorteile? [geschlossen]

131

Was sind die Hauptvorteile von Maven im Vergleich zu Ameisen? Es scheint eher ärgerlich als hilfreich zu sein. Ich benutze Maven 2 mit einfachem Eclipse Java EE (kein m2eclipse) und Tomcat.

Anhänger von Maven glauben das

  1. Mit Maven können Sie Ihre Paketabhängigkeiten einfach abrufen

  2. Maven zwingt Sie zu einer Standardverzeichnisstruktur

Durch meine Erfahrung

  1. Das Herausfinden von Paketabhängigkeiten ist wirklich nicht so schwierig. Du machst es sowieso selten. Wahrscheinlich einmal während der Projekteinrichtung und einige weitere während der Aktualisierung. Mit maven beheben Sie am Ende nicht übereinstimmende Abhängigkeiten, schlecht geschriebene Poms und führen ohnehin Paketausschlüsse durch.

  2. Langsamer FIX-COMPILE-DEPLOY-DEBUG-Zyklus, der die Produktivität beeinträchtigt. Das ist mein Hauptproblem. Wenn Sie eine Änderung vornehmen, müssen Sie warten, bis der Maven-Build aktiviert ist, und warten, bis er bereitgestellt wird. Keine heiße Bereitstellung.

Oder mache ich es einfach falsch? Bitte weisen Sie mich in die richtige Richtung, ich bin ganz Ohr.

trix
quelle
1
Ich bin wirklich interessiert an Punkt 2. Hat jemand anderes den langsamen Fix-Compile-Deployment-Zyklus bemerkt? oder jeder weiß es irgendwie, schweigt aber darüber, da Maven das Beste ist, was wir haben / am häufigsten / am coolsten. Es ist schon schlimm genug, einen Krieg / ein Ohr für den Einsatz zu schaffen, Maven macht es noch schlimmer. Es dauert ungefähr 5 Sekunden auf meinem Computer, um eine JSP-Änderung in einem Maven-Projekt in einer explodierten Verzeichnisstruktur anzuzeigen. weniger als 1 Sek. Ich kann mehrmals speichern und es kompiliert nur die letzte Änderung auf maven? Jeder Speichervorgang löst einen Build aus.
Trix
Vielleicht ist es hier nicht das Problem, aber IDE-Unterstützung / Plugin? Maven gibt es schon eine ganze Weile, wenn wir es nicht richtig machen können, sollten wir etwas anderes bewegen / erfinden / vorschlagen? neben Ivy
Trix
2
@Javid Während der Titel der Frage ähnlich aussieht, ist der Hauptteil der Frage IMO anders und ich betrachte ihn nicht als Betrug.
Pascal Thivent
Für eine Sekunde klang es, als würden Sie über NuGet sprechen ...
Micahhoover

Antworten:

108

Das Herausfinden von Paketabhängigkeiten ist wirklich nicht so schwierig. Du machst es sowieso selten. Wahrscheinlich einmal während der Projekteinrichtung und einige weitere während der Aktualisierung. Mit maven beheben Sie am Ende nicht übereinstimmende Abhängigkeiten, schlecht geschriebene Poms und führen ohnehin Paketausschlüsse durch.

Nicht so schwer ... für Spielzeugprojekte. Aber die Projekte, an denen ich arbeite, haben viele, wirklich viele, und ich bin sehr froh, sie transitiv zu bekommen, um ein standardisiertes Namensschema für sie zu haben. All dies manuell von Hand zu verwalten, wäre ein Albtraum.

Und ja, manchmal muss man an der Konvergenz von Abhängigkeiten arbeiten. Aber denken Sie zweimal darüber nach, dies ist Maven nicht eigen, dies ist jedem System eigen, das Abhängigkeiten verwendet (und ich spreche hier allgemein von Java-Abhängigkeiten).

Also mit Ant musst du dasselbe tun Arbeit außer dass Sie alles manuell erledigen müssen: eine Version von Projekt A und seinen Abhängigkeiten abrufen, eine Version von Projekt B und seine Abhängigkeiten abrufen, selbst herausfinden, welche genauen Versionen sie verwenden, überprüfen dass sie sich nicht überlappen, prüfen, ob sie nicht inkompatibel sind usw. Willkommen in der Hölle.

Auf der anderen Seite unterstützt Maven das Abhängigkeitsmanagement und ruft sie transitiv für mich ab und bietet mir die Werkzeuge, die ich zum Verwalten der Komplexität des Abhängigkeitsmanagements benötige : Ich kann einen Abhängigkeitsbaum analysieren, die in transitiven Abhängigkeiten verwendeten Versionen steuern und einige davon ausschließen Sie steuern bei Bedarf die Konvergenz zwischen Modulen usw. Es gibt keine Magie. Aber zumindest hast du Unterstützung.

Und vergessen Sie nicht, dass das Abhängigkeitsmanagement nur ein kleiner Teil dessen ist, was Maven bietet. Es gibt noch viel mehr (ohne die anderen Tools zu erwähnen, die sich gut in Maven integrieren lassen, z . B. Sonar ).

Langsamer FIX-COMPILE-DEPLOY-DEBUG-Zyklus, der die Produktivität beeinträchtigt. Das ist mein Hauptproblem. Wenn Sie eine Änderung vornehmen, müssen Sie warten, bis der Maven-Build aktiviert ist, und warten, bis er bereitgestellt wird. Keine heiße Bereitstellung.

Erstens, warum benutzt du Maven so? Ich nicht. Ich verwende meine IDE, um Tests zu schreiben, Code zu schreiben, um sie zu überarbeiten, umzugestalten, bereitzustellen, im laufenden Betrieb bereitzustellen und einen lokalen Maven-Build auszuführen, wenn ich fertig bin, bevor ich ein Commit durchführe, um sicherzustellen, dass ich den kontinuierlichen Build nicht unterbreche.

Zweitens bin ich mir nicht sicher, ob die Verwendung von Ant die Dinge viel besser machen würde. Und meiner Erfahrung nach bieten modulare Maven-Builds mit binären Abhängigkeiten eine schnellere Build-Zeit als typische monolithische Ant-Builds. Werfen Sie einen Blick auf Maven Shell, um eine (wieder) verwendbare Maven-Umgebung zu erhalten (was übrigens fantastisch ist).

Am Ende, und es tut mir leid, das zu sagen, ist es nicht wirklich Maven, der Ihre Produktivität beeinträchtigt, sondern Sie missbrauchen Ihre Werkzeuge. Und wenn Sie damit nicht zufrieden sind, was soll ich sagen, verwenden Sie es nicht. Persönlich benutze ich Maven seit 2003 und habe nie zurückgeschaut.

Pascal Thivent
quelle
@Pascal, können Sie sagen, welche Tools Sie verwenden? IDE, Plugins usw. Sagen Sie uns, dass wenn ich eine .properties-Datei oder eine JSP-Datei ändere, diese ohne Maven-Build im laufenden Betrieb bereitgestellt wird? (Vielleicht ist Hot Deploy hier nicht der richtige Begriff). Mir war nicht klar, was ich mit Ameise meinte. Ich wollte das Standard-Explosionsverzeichnis während der Entwicklung verwenden und ant verwenden, um vor der Veröffentlichung ein War / Ear zu erstellen. Für ein explodiertes Verzeichnis sind die Regeln einfach: Kopieren / Kompilieren von Dateien von src in Klassen und berühren Sie den Rest nicht.
Trix
Fortsetzung ... In meinen Projekten werden jedoch die Gläser der Module auf Tomcat bereitgestellt. Wenn ich eine .jsp ändere, muss Maven diese Gläser dann nicht neu erstellen?
Trix
4
Sie müssen zugeben, dass die meisten Projekte Spielzeugprojekte sind, auch bekannt als einfache Abhängigkeiten. Das ist nur ein Gesetz der Statistik.
Trix
2
@trix, über Hot Deployment Ant vs. Maven: Wenn Sie Ant Ant Build für Hot Deployment nicht ausführen, warum verwenden Sie Maven für dasselbe? Ich denke, wenn Sie Ameise für dasselbe verwenden, würde es mindestens genauso lange dauern ... nicht wahr?
Reddy
2
Pascal, können Sie uns bitte sagen, wie Sie ein Projekt für die Maven-Natur konfiguriert haben und den Erstellungsprozess nicht für die Bereitstellung verwenden? Dies ist der Punkt 2 der Ausgangsfrage. Ich frage mich, wie das geht. Schätzen Sie es also sehr, wenn Sie uns eine klare Erklärung geben können.
20

Maven kann als vollständiges Projektentwicklungstool betrachtet werden, nicht nur als Build-Tool wie Ant. Sie sollten Eclipse IDE mit Maven-Plugin verwenden , um alle Ihre Probleme zu beheben.

Hier sind einige Vorteile von Maven, die auf der Seite Vorteile der Verwendung von Maven aufgeführt sind:

Henning

  • Schnelle Projekteinrichtung, keine komplizierten build.xml-Dateien, nur ein POM und los geht's
  • Alle Entwickler in einem Projekt verwenden aufgrund des zentralisierten POM dieselben JAR-Abhängigkeiten.
  • eine Reihe von Berichten und Metriken für ein Projekt "kostenlos" erhalten
  • Reduzieren Sie die Größe der Quellverteilungen, da die Gläser von einer zentralen Stelle gezogen werden können

Emmanuel Venisse

  • Da viele Ziele verfügbar sind, ist es nicht erforderlich, einen bestimmten Build-Prozess-Teil zu entwickeln, der im Gegensatz zu ANT steht. Wir können vorhandene ANT-Aufgaben im Build-Prozess mit dem Antrun-Plugin wiederverwenden

Jesse Mcconnell

  • Fördert den modularen Aufbau von Code. Durch die einfache Verwaltung mehrerer Projekte kann das Design in mehrere logische Teile unterteilt werden, wobei diese Teile mithilfe der Abhängigkeitsverfolgung in POM-Dateien miteinander verwoben werden.
  • Erzwingt den modularen Aufbau von Code. Es ist einfach, dem modularen Code einen Lippenbekenntnis zu geben, aber wenn sich der Code in separaten Kompilierungsprojekten befindet, ist es unmöglich, Referenzen zwischen Codemodulen zu kreuzen, es sei denn, Sie lassen dies in Ihrem Abhängigkeitsmanagement ausdrücklich zu ... es gibt kein "Ich werde" Tun Sie dies jetzt und beheben Sie die späteren Implementierungen.
  • Das Abhängigkeitsmanagement ist eindeutig deklariert. Mit dem Abhängigkeitsverwaltungsmechanismus müssen Sie versuchen, Ihre JAR-Versionierung zu vermasseln. Es gibt kein klassisches Problem: "Welche Version dieses Vendor-JARs ist das?" Wenn Sie es in einem vorhandenen Projekt einrichten, wird das vorhandene Durcheinander abgerissen, wenn es vorhanden ist, wenn Sie gezwungen sind, "unbekannte" Versionen in Ihrem Repository zu erstellen, um die Dinge zum Laufen zu bringen ... das oder sich selbst zu belügen, dass Sie das kennen aktuelle Version von ABC.jar.
  • Stark typisierter Lebenszyklus Es gibt einen stark definierten Lebenszyklus, den ein Softwaresystem von der Initiierung eines Builds bis zum Ende durchläuft. Die Benutzer können ihr System mischen und an den Lebenszyklus anpassen, anstatt ihren eigenen Lebenszyklus zusammenzuschustern. Dies hat den zusätzlichen Vorteil, dass die Mitarbeiter von einem Projekt zum anderen wechseln und beim Erstellen von Software mit demselben Vokabular sprechen können

Vincent Massol

  • Größere Dynamik: Ant ist jetzt ein Vermächtnis und bewegt sich nicht schnell voran. Maven macht schnell Fortschritte und es besteht das Potenzial, viele hochwertige Tools rund um Maven zu haben (CI, Dashboard-Projekt, IDE-Integration usw.).
YoK
quelle
5
Bitte geben Sie bei der Abstimmung an, warum dies nicht der Fall ist, sondern eine ethische Regel für den Stapelüberlauf.
YoK
1
An Referenzen ist nichts auszusetzen, aber Sie müssen wirklich klarstellen, dass der Inhalt nicht Ihnen gehört.
Pascal Thivent
Vielen Dank. Ich werde sicherstellen, dass ich es anders zitiere als nur zu erwähnen, woher es stammt. Nur 30 ungerade Tage alt bei Stackoverflow und immer noch die Kunst lernen :).
YoK
11

Es ist nicht schwer, Abhängigkeiten für kleine Projekte herauszufinden. Sobald Sie sich jedoch mit einem Abhängigkeitsbaum mit Hunderten von Abhängigkeiten befassen, können die Dinge leicht außer Kontrolle geraten. (Ich spreche aus Erfahrung hier ...)

Der andere Punkt ist, dass Sie, wenn Sie eine IDE mit inkrementeller Kompilierung und Maven-Unterstützung (wie Eclipse + m2eclipse) verwenden, Edit / Compile / Hot Deploy und Test einrichten können sollten.

Ich persönlich mache das nicht, weil ich dieser Art der Entwicklung aufgrund schlechter Erfahrungen in der Vergangenheit (vor Maven) misstraue. Vielleicht kann jemand kommentieren, ob dies tatsächlich mit Eclipse + m2eclipse funktioniert.

Stephen C.
quelle
Man könnte mit maven beginnen, um alle Abhängigkeiten zu erhalten, und dann die Abhängigkeiten in sein Projekt kopieren, oder?
Trix
2
Ich nehme an, du könntest. Dies kann jedoch zu Problemen führen, wenn Sie die Abhängigkeiten Ihres Projekts aktualisiert haben ... oder wenn Ihr Projekt von Snapshots abhängt.
Stephen C
Ich meine 2 Projekte haben, der einzige Zweck des Maven-Projekts ist es, Abhängigkeiten zu bekommen. Verwenden Sie die Versionskontrolle, um die Änderungen zwischen Abhängigkeitsaktualisierungen zu verfolgen. Ich mache das trotzdem, nur damit ich die Änderungen sehen kann, falls es meinen Build kaputt macht.
Trix
4
Ughh. So ist Maven nicht für den Einsatz konzipiert. Einer der großen Vorteile von Maven besteht darin, zu vermeiden, dass abhängige Bibliotheken in die Versionskontrolle eingecheckt werden. Mit Ihrem Ansatz werden Sie Ihr VCS mit vielen Versionen vieler Binärdateien überladen. Und einige VCSs sind besonders schlecht im Umgang mit Binärdateien.
Stephen C
2
Im Allgemeinen lernen Sie auf die harte Weise, beim Schreiben von Programmen jeder Art von Magie überdrüssig zu sein: -S
Thorbjørn Ravn Andersen
9

Maven ist eines der Tools, mit denen Sie im Voraus entscheiden müssen , ob Sie es mögen und verwenden möchten, da Sie einige Zeit damit verbringen werden, es zu lernen. Wenn Sie diese Entscheidung ein für alle Mal getroffen haben, können Sie alle Arten überspringen Zweifel beim Lernen (weil es dir gefällt und du es benutzen willst )!

Die starken Konventionen helfen an vielen Orten - wie Hudson, der mit Maven-Projekten Wunder vollbringen kann -, aber es kann anfangs schwer zu erkennen sein.

Bearbeiten: Ab 2016 ist Maven das einzige Java-Build-Tool, mit dem alle drei wichtigen IDEs die Quellen sofort verwenden können. Mit anderen Worten, die Verwendung von Maven macht Ihren Build IDE-unabhängig. Dies ermöglicht beispielsweise die Verwendung von Netbeans-Profilen, selbst wenn Sie normalerweise in Eclipse arbeiten

Thorbjørn Ravn Andersen
quelle
1
Und das Gegenteil ist auch der Fall, viele Leute kommen mit vorgefasstem Hass zu Maven, weil es keine Ameise ist usw.
Goibniu
Das Gegenteil? Was meinen Sie?
Thorbjørn Ravn Andersen
9

Maven Vorteile gegenüber Ameisen sind einige. Ich versuche sie hier zusammenzufassen.

Konvention über Konfiguration
Maven verwendet einen unverwechselbaren Ansatz für das Projektlayout und den Start, der es einfach macht, einfach in ein Projekt zu springen. Normalerweise werden nur der Befehl checkount und maven benötigt, um die Artefakte des Projekts abzurufen.

Projektmodularisierung
Projektkonventionen schlagen dem Entwickler vor (oder zwingen ihn besser), das Projekt zu modularisieren. Anstelle eines monolithischen Projekts sind Sie häufig gezwungen, Ihr Projekt in kleinere Unterkomponenten aufzuteilen, was das Debuggen und Verwalten der gesamten Projektstruktur erleichtert

Abhängigkeitsmanagement und Projektlebenszyklus
Insgesamt ist das Abhängigkeitsmanagement mit einer guten SCM-Konfiguration und einem internen Repository recht einfach, und Sie sind erneut gezwungen, in Bezug auf den Projektlebenszyklus zu denken - Komponentenversionen, Release-Management usw. Ein bisschen komplexer als die Ameise etwas, aber wieder eine Verbesserung der Qualität des Projekts.

Was ist los mit Maven?
Maven ist nicht einfach. Der Erstellungszyklus (was wann erledigt wird) ist im POM nicht so klar. Außerdem treten Probleme mit der Qualität von Komponenten und fehlenden Abhängigkeiten in öffentlichen Repositorys auf.
Der beste Ansatz (für mich) besteht darin, ein internes Repository zum Zwischenspeichern (und Beibehalten) von Abhängigkeiten zu haben und das Release-Management von Komponenten anzuwenden. Für Projekte, die größer sind als die Beispielprojekte in einem Buch, werden Sie sich vorher oder nachher bei maven bedanken

Luca Botti
quelle
6

Maven kann Vorteile für Ihren Erstellungsprozess bieten, indem Standardkonventionen und -praktiken angewendet werden, um Ihren Entwicklungszyklus zu beschleunigen und gleichzeitig eine höhere Erfolgsrate zu erzielen. Weitere Informationen darüber, wie Maven Sie bei Ihrem Entwicklungsprozess unterstützen kann, finden Sie unter Die Vorteile der Verwendung von Maven.

user433555
quelle
3

Maven ist ein leistungsstarkes Projektmanagement-Tool, das auf POM (Project Object Model) basiert. Es wird für die Erstellung, Abhängigkeit und Dokumentation von Projekten verwendet. Es vereinfacht den Erstellungsprozess wie ANT. Aber es ist zu weit fortgeschritten als ANT. Maven hilft bei der Verwaltung von Builds, Dokumentationen, Reporing, SCMs, Releases und Distribution. - Das Maven-Repository ist ein Verzeichnis einer gepackten JAR-Datei mit der Datei pom.xml. Maven sucht in den Repositorys nach Abhängigkeiten.

Nikhil Pahariya
quelle
2

Ich bin noch nie auf Punkt 2 gestoßen? Können Sie erklären, warum dies Ihrer Meinung nach die Bereitstellung in irgendeiner Weise beeinflusst? Wenn überhaupt, können Sie mit Maven Ihre Projekte modular strukturieren, sodass Hotfixes für Fehler in einer bestimmten Ebene tatsächlich möglich sind, und beispielsweise eine unabhängige Entwicklung einer API aus dem Rest des Projekts.

Es ist möglich, dass Sie versuchen, alles in ein einziges Modul zu packen. In diesem Fall ist das Problem nicht wirklich maven, sondern die Art und Weise, wie Sie es verwenden.

Goibniu
quelle
Ich benutze Eclipse Jee, Maven 2 und Tomcat. Offensichtlich eine Web-App. Wenn ich eine Eigenschaftendatei oder einen JSP ändere, um meine Änderungen auf Tomcat zu sehen, muss Maven seine Erstellung durchführen, ein War / Ear erstellen und auf Tomcat bereitstellen. Dies ist langsam im Vergleich zu einer explodierten Verzeichnisstruktur.
Trix
1
@trix Hot Deploy unter Eclipse mit Tomcat funktioniert einfach. Du machst es falsch.
Pascal Thivent
0

Dies hätte ein Kommentar sein sollen, aber er passte nicht in eine Kommentarlänge, also habe ich ihn als Antwort gepostet.

Alle in anderen Antworten genannten Vorteile sind mit einfacheren Mitteln als mit Maven erreichbar. Wenn Sie beispielsweise neu in einem Projekt sind, verbringen Sie ohnehin mehr Zeit damit, Projektarchitekturen zu erstellen, Komponenten zu verbinden, zu codieren, als Jars herunterzuladen und in den lib-Ordner zu kopieren. Wenn Sie Erfahrung in Ihrer Domäne haben, wissen Sie bereits, wie Sie das Projekt mit welchen Bibliotheken starten können. Ich sehe keinen Vorteil in der Verwendung von Maven, insbesondere wenn es beim automatischen Ausführen des "Abhängigkeitsmanagements" viele Probleme aufwirft.

Ich habe nur mittlere Kenntnisse über Maven, aber ich sage Ihnen, ich habe große Projekte (wie ERPs) ohne Verwendung von Maven durchgeführt.

Syed Aqeel Ashiq
quelle