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.
Antworten:
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:
Ein großer Teil meiner Abneigung gegen Maven kann durch den folgenden Auszug aus Better Builds with Maven erklärt werden:
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.
quelle
quelle
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:
Die Nachteile für mich sind hauptsächlich:
Ich glaube wirklich, dass es sich lohnt, ein bisschen Zeit damit zu verbringen, Maven kennenzulernen.
quelle
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 :-)
quelle
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.
quelle
Weil Maven ein Mittel ist, um erwachsene Männer auf schluchzende Massen absoluten Terrors zu reduzieren.
quelle
Vorteile:
Nachteile:
Wettbewerb:
Fazit: Alle unsere Projekte werden bereits seit mehreren Jahren mit Maven durchgeführt.
quelle
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
quelle
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.
quelle
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:
Und es hat einige Probleme mit:
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.
quelle
Ich möchte einigen der in diesem Forum vorgebrachten Beschwerden entgegentreten:
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:
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.
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 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 ...
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
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Zu viel Magie.
quelle
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.).
quelle
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:
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:
quelle
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.
quelle
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:
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.
quelle
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?"
quelle
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
-o
Option 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.
quelle
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:
quelle
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:
pom.xml
Datei weniger ausführlichquelle
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.
quelle
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.
quelle
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.
quelle
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 ...
quelle
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:
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.
quelle
Es ist komplizierter als die Sprache, in der Sie Ihr Projekt geschrieben haben. Die richtige Konfiguration ist schwieriger als die eigentliche Programmierung.
quelle
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.
quelle