Was macht Maven in Theorie und Praxis? Wann lohnt es sich, es zu benutzen? [geschlossen]

156

Ich bin dabei, ein Java-Projekt nur zum Üben zu starten. Ich habe über Maven gelesen, aber ich verstehe nicht wirklich, wann es verwendet werden soll.

Können Sie mir einige praktische Tipps geben? Hilft Maven sehr? Was macht Maven eigentlich für mein Projekt?

Piotr Krysiak
quelle
Hej, sieh dir meine Frage zu Maven, Spring und Roo an. Ich habe Maven viel benutzt, um mit Eclipse zu arbeiten und um die Entwicklungszeit zu beschleunigen. Es gibt jedoch einige Probleme. Ich denke, Sie müssen das Java-Annotationssystem zusammen mit Maven verstehen. Aber werfen Sie einen Blick auf die Frage, die ich verlinkt habe ..
mm24
@ArtB gibt eine gute Erklärung dafür, was Maven ist. Wie ich jedoch in meinem Kommentar zu seiner Antwort sage, denke ich nicht, dass Sie es verwenden sollten. Wenn Sie ein Build-Tool benötigen, verwenden Sie Gradle. Laden Sie es herunter, installieren Sie es und erstellen Sie in Ihrem Projekt eine Datei mit dem Namen build.gradle, die nur eine Zeile enthält apply plugin: 'java'. Angenommen, Ihr Quellcode befindet sich an der üblichen Stelle ( src/main/java, Unit-Tests in src/test/java), können Sie Ihren Code jetzt erstellen, testen und verpacken, indem Sie sagen gradle build. Einfach!
Tom Anderson
2
Um Gradle zu verwenden Sie benötigen Groovy zu lernen und Sie auf jeden Fall wird kommen über Projekt mit Maven so ist es immer noch wert Lernen. Das Verständnis von Maven erleichtert auch das Verständnis anderer Tools, die danach kamen.
Schlitten
Was hat Maven überhaupt mit Java-Annotationen zu tun?
Schlitten
1
+1 für Gradle, es ist nicht nur für Java-Entwickler näher zu Hause, es kann auch Maven-Artefakte wiederverwenden und nicht standardmäßige Builds einfach erstellen. Stackoverflow.com/questions/1163173/…
Kalpesh Soni

Antworten:

182

Was es macht

Maven ist ein "Build-Management-Tool", mit dem definiert wird, wie Ihre .javaDateien kompiliert .class, in .jar(oder .waroder .ear) Dateien gepackt, (vor / nach) mit Tools verarbeitet, verwaltet CLASSPATHund alle anderen Arten von Aufgaben verwaltet werden, die erforderlich sind Bauen Sie Ihr Projekt. Es ähnelt Apache Ant oder Gradle oder Makefiles in C / C ++, versucht jedoch, vollständig in sich geschlossen zu sein, sodass Sie keine zusätzlichen Tools oder Skripte benötigen sollten, indem Sie andere allgemeine Aufgaben wie das Herunterladen und Installieren der erforderlichen Bibliotheken usw. einbeziehen.

Es basiert auch auf dem Thema "Build-Portabilität", sodass Sie keine Probleme bekommen, wenn derselbe Code mit demselben Buildscript auf einem Computer funktioniert, aber nicht auf einem anderen (dies ist ein bekanntes Problem, wir haben VMs von Windows 98 Maschinen, da wir einige unserer Delphi-Anwendungen nirgendwo anders kompilieren konnten). Aus diesem Grund ist es auch die beste Möglichkeit, an einem Projekt zwischen Personen zu arbeiten, die unterschiedliche IDEs verwenden, da IDE-generierte Ant-Skripte schwer in andere IDEs zu importieren sind, aber heutzutage verstehen und unterstützen alle IDEs Maven ( IntelliJ , Eclipse und NetBeans) ). Auch wenn Sie Maven nicht mögen, ist es der Bezugspunkt für alle anderen modernen Build-Tools.

Warum sollten Sie es verwenden

Es gibt drei Dinge an Maven, die sehr nett sind.

  1. Maven lädt (nachdem Sie angegeben haben, welche Sie verwenden) automatisch alle von Ihnen verwendeten Bibliotheken und die von ihnen für Sie verwendeten Bibliotheken herunter . Das ist sehr schön und macht den Umgang mit vielen Bibliotheken lächerlich einfach. Auf diese Weise können Sie die "Abhängigkeitshölle" vermeiden . Es ist ähnlich wie Apache Ant's Ivy .

  2. Es wird " Konvention über Konfiguration " verwendet, sodass Sie standardmäßig nicht die Aufgaben definieren müssen, die Sie ausführen möchten. Sie müssen keinen "Kompilierungs" -, "Test" -, "Paket" - oder "Bereinigungs" -Schritt schreiben, wie Sie dies in Ant oder einem Makefile tun müssten. Legen Sie die Dateien einfach an die Stellen, an denen Maven sie erwartet, und es sollte sofort funktionieren.

  3. Maven hat auch viele nette Plug-Ins, die Sie installieren können und die viele Routineaufgaben von der Generierung von Java-Klassen aus einem XSD-Schema mit JAXB bis zur Messung der Testabdeckung mit Cobertura erledigen . Fügen Sie sie einfach zu Ihrem hinzu pom.xmlund sie werden in alles integriert, was Sie tun möchten.

Die anfängliche Lernkurve ist steil, aber (fast) jeder professionelle Java-Entwickler verwendet Maven oder wünscht sich dies. Sie sollten Maven für jedes Projekt verwenden, obwohl Sie sich nicht wundern sollten, wenn Sie eine Weile brauchen, um sich daran zu gewöhnen, und wenn Sie manchmal wünschen, Sie könnten die Dinge einfach manuell erledigen, da das Lernen von etwas Neuem manchmal weh tut. Sobald Sie sich jedoch wirklich an Maven gewöhnt haben, werden Sie feststellen, dass das Build-Management fast keine Zeit in Anspruch nimmt.

Wie man anfängt

Der beste Startpunkt ist " Maven in 5 Minuten ". Damit können Sie mit einem Projekt beginnen, in dem Sie alle erforderlichen Dateien und Ordner einrichten können (ja, ich empfehle zumindest zunächst die Verwendung des Schnellstart-Archetyps).

Nachdem Sie begonnen haben, möchten Sie besser verstehen, wie das Tool verwendet werden soll. Dafür ist " Better Builds with Maven " der gründlichste Ort, um zu verstehen, wie es funktioniert. " Maven: The Complete Reference " ist jedoch aktueller. Lesen Sie den ersten zum Verständnis, aber verwenden Sie dann den zweiten als Referenz.

Schlitten
quelle
12
Es gibt zahlreiche professionelle Java-Entwickler, die Maven nicht verwenden und froh sind, dass sie dies nicht tun. Einige von ihnen lehnen einfach ihre Komplexität und Inflexibilität ab und bleiben bei Ant oder ähnlichem, aber eine wachsende Anzahl von ihnen sind Menschen, die zu Maven-Nachfolgern wie Gradle und Buildr gewechselt sind. Diese Nachfolger erben von Maven die Idee, sofort leistungsstarke Build-Schritte bereitzustellen, machen es jedoch immens einfacher, auch benutzerdefinierte Schritte hinzuzufügen. Angesichts ihrer Existenz glaube ich ehrlich gesagt nicht, dass es einen Grund gibt, Maven für neue Projekte zu verwenden.
Tom Anderson
5
Es stellt sich immer die Frage, wie viele Details in eine Antwort eingegeben werden müssen, aber wenn Sie ein durchschnittlicher Java-Entwickler sind, ist es in Ihrem Büro wahrscheinlich entweder Maven oder Shitty Ant Hell (Ant + Bash + Perl + Build-Computer, konfiguriert mit magischen Pfaden). Wenn Sie einer der wenigen glücklichen sind, die mit A + -Entwicklern in einer guten Umgebung arbeiten, in der Sie frei wählen können, gibt es andere Möglichkeiten (Gradle ist eine davon). Aber wenn Sie an einem durchschnittlichen Ort arbeiten, ist Maven das beste Werkzeug, mit dem sich Ihre Kollegen nicht mit etwas Spitzem schneiden können.
Schlitten
4
Ich denke nicht, dass Sie ein A + -Entwickler sein müssen, um Gradle zu verwenden. Ich verstehe nicht, warum eine Organisation, die Maven adoptieren könnte, Gradle nicht adoptieren könnte. Es ist wahr, dass Gradle Sie sich in den Fuß schießen lässt, genau wie Ant, aber auf eine Weise, die Maven ziemlich schwer macht (und ich habe eine Sammlung von Schussfüßen meiner Kollegen, um dies zu beweisen); Das ist der Kompromiss, um Dinge zu ermöglichen, die Maven praktisch unmöglich macht.
Tom Anderson
4
In Bezug auf die Verwendung von Gradle und die Vermeidung von Schussfüßen schlage ich eine Triage-Klassifizierung von Programmierern vor. Einige Programmierer haben keine Angst davor, die Build-Skripte zu bearbeiten und die Dinge mehr oder weniger richtig zu machen. Diese Leute sind nützlich. Einige Programmierer haben Angst vor den Build-Skripten und berühren sie nicht. Diese Leute sind zumindest nicht schädlich; Ich war in einem 12-köpfigen Team, in dem nur zwei von uns es gewagt haben, den Build zu berühren, und es hat tatsächlich ziemlich gut funktioniert. Einige Programmierer haben keine Angst vor den Build-Skripten, werden sie aber vermasseln, wenn sie sie berühren. Diese Leute sind gefährlich.
Tom Anderson
1
so ist es wie npm für Java
KJW
9

Aus dem Sonatype-Dokument :

Die Antwort auf diese Frage hängt von Ihrer eigenen Perspektive ab. Die große Mehrheit der Maven-Benutzer wird Maven als "Build-Tool" bezeichnen: ein Tool, mit dem implementierbare Artefakte aus dem Quellcode erstellt werden. Bauingenieure und Projektmanager bezeichnen Maven möglicherweise als etwas umfassenderes: ein Projektmanagement-Tool. Was ist der Unterschied? Ein Build-Tool wie Ant konzentriert sich ausschließlich auf die Vorverarbeitung, Kompilierung, Verpackung, Prüfung und Verteilung. Ein Projektmanagement-Tool wie Maven bietet eine Obermenge von Funktionen, die in einem Build-Tool enthalten sind. Maven bietet nicht nur Build-Funktionen, sondern kann auch Berichte erstellen, eine Website erstellen und die Kommunikation zwischen Mitgliedern eines Arbeitsteams erleichtern.

Ich würde dringend empfehlen, sich das Sonatype-Dokument anzusehen und einige Zeit mit den verfügbaren Plugins zu verbringen, um die Leistungsfähigkeit von Maven zu verstehen.

Ganz kurz, es arbeitet auf einer höheren konzeptionellen Ebene als (sagen wir) Ant. Mit Ant würden Sie die Gruppe von Dateien und Ressourcen angeben, die Sie erstellen möchten, dann angeben, wie sie zusammengefügt werden sollen, und die Reihenfolge angeben, in der (clean / compile / jar) auftreten soll. Bei Maven ist das alles implizit. Maven erwartet, dass Ihre Dateien an bestimmten Orten gefunden werden, und arbeitet damit automatisch. Folglich kann das Einrichten eines Projekts mit Maven viel einfacher sein, aber Sie müssen sich an die Regeln von Maven halten!

Brian Agnew
quelle
Ich habe es nicht abgelehnt, aber vielleicht haben Downvoter Ihr Zitat aus der Sonatype-Propaganda als implizite Bestätigung von Mavens totalitärer "Projektmanagement-Tool" -Philosophie gelesen.
Tom Anderson
1
Ich habe nicht das Gefühl, dass Sie die OP-Frage beantwortet haben, sondern nur das Marketing-Spiel gepostet haben ... und dieses Spiel ist lächerlich, da "Projektmanagement" so viel mehr ist als das, was Maven tut. Es dient dazu, mehr zu verwirren als zu helfen. MEINER BESCHEIDENEN MEINUNG NACH.
Schlitten
2
@Brian Entschuldigung, wenn mein vorheriger Kommentar flammig klingt, aber lassen Sie es mich umformulieren: Ich glaube, Ihr Kommentar erklärt Maven nur dann gut, wenn Sie bereits verstehen, was Maven ist, aber als Ausgangspunkt ist er nicht hilfreich.
Schlitten
5

Mavenist ein Build-Tool. Zusammen mit Antoder Gradlesind Javas Werkzeuge zum Bauen.
Wenn Sie ein Neuling in Java sind, bauen Sie einfach mit Ihrer IDE, da dies Maveneine steile Lernkurve hat.

Cratylus
quelle
Die IDE-Unterstützung für Maven in NetBeans ist sehr gut, sodass die Lernkurve fast nicht vorhanden ist.
Kapitän Giraffe