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
Mit Maven können Sie Ihre Paketabhängigkeiten einfach abrufen
Maven zwingt Sie zu einer Standardverzeichnisstruktur
Durch meine Erfahrung
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.
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.
quelle
Antworten:
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 ).
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.
quelle
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:
quelle
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.
quelle
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
quelle
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
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle