Mvn-Installation oder Mvn-Paket

134

Ich bin neu in Maven. Ich habe ein Java-basiertes Webprojekt mit Maven in MyEclipse konfiguriert.
Wenn ich nun Java-Dateien geändert habe, muss ich das tun Run as -> Mvn installoder Mvn package?

user2192023
quelle

Antworten:

158

von http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

package: Nehmen Sie den kompilierten Code und verpacken Sie ihn in seinem verteilbaren Format, z. B. einer JAR.

install: Installieren Sie das Paket im lokalen Repository, um es als Abhängigkeit in anderen Projekten lokal zu verwenden

Die Antwort auf Ihre Frage lautet also, es hängt davon ab, ob Sie es in Ihrem lokalen Repo installieren möchten. Bei der Installation wird auch das Paket ausgeführt, da es sich im Zielphasenstapel weiter oben befindet.

ezcodr
quelle
Ich habe ein Projekt, in dem ich den Hauptordnercode und den Testordnercode in Jar konvertiere. Dann möchte ich dies in nexus bereitstellen, damit es von anderen Projekten verwendet werden kann. Mein Bereitstellungsbefehl lautet "mvn clean deploy -DskipTests". Kann ich dieses Befehlspaket erstellen, anstatt es auf einem lokalen Repo zu installieren?
MasterJoe2
@ MasterJoe2 "Dann möchte ich dies in nexus bereitstellen" Das ist, was deploytut. Wenn Sie es durch ersetzen package, wird es nicht für Nexus bereitgestellt.
Wal
37

mvn installist die am häufigsten verwendete Option.
mvn packagewird nur selten verwendet, nur wenn Sie ein Problem mit dem Maven-Erstellungsprozess beheben.

Siehe: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Beachten Sie, dass mvn packagenur eine JAR-Datei erstellt wird.
mvn installwird das tun und die JAR- (und Klassen- usw.) Dateien an den richtigen Stellen installieren, wenn anderer Code von diesen JARs abhängt.

Normalerweise mache ich a mvn clean install; Dadurch wird das targetVerzeichnis gelöscht und alle Gläser an diesem Speicherort werden neu erstellt.
Die Reinigung hilft bei nicht benötigten oder entfernten Dingen, die manchmal im Weg stehen können.
Anstatt zu debuggen (manchmal), fangen Sie einfach die ganze Zeit neu an.

Johan
quelle
27
Ich bin nicht der Meinung, dass das Paket in 2 Punkten selten verwendet wird. 1) Es wird jedes Mal ausgeführt, wenn Sie install ausführen. 2) Wenn Sie eine .war-Datei erstellen, ist es in Ordnung, nur ein Paket auszuführen, da Sie in Ihrem lokalen Repo keinen Krieg benötigen.
Joshua Wilson
5
Die Antwort erklärt nicht, warum Sie es vorziehen, im lokalen Repository zu installieren. Nach meinem Verständnis liefert der Reaktor die Abhängigkeiten zwischen den Modulen, wenn die Projekte richtig eingerichtet sind. Wenn die Projekte nicht richtig eingerichtet sind, kann die Installation diese Tatsache einfach verbergen und die falschen Artefakte verwenden. Wenn Sie abhängige Projekte haben, die aus irgendeinem Grund separat erstellt werden müssen, möchten Sie nur dann installieren.
Vsevolod Golovanov
11

In der Lifecycle-Referenz werden bei der Installation die Integrationstests des Projekts ausgeführt, beim Paket nicht.

Wenn Sie die generierten Artefakte wirklich nicht installieren müssen, verwenden Sie mindestens Verify .

DNA
quelle
5

Beachten Sie außerdem, dass Sie, wenn Ihr Projekt aus mehreren voneinander abhängigen Modulen besteht, "install" anstelle von "package" verwenden sollten. Andernfalls schlägt Ihr Build fehl. Wenn Sie den Befehl install verwenden, wird Modul A gepackt und im lokalen Repository bereitgestellt. Wenn Modul B dann Modul A als Abhängigkeit benötigt, kann es vom lokalen Repository darauf zugreifen.

Mr.Q.
quelle
4

Wenn Sie sich nicht unter Verwendung eines Remote - Repository (wie artifactory), verwenden plain old: mvn clean install

Ziemlich altes Thema, aber AFAIK, wenn Sie ein eigenes Repository (z. B. mit Artifactory) betreiben, um das Glas unter Ihren Teams zu teilen, möchten Sie es möglicherweise verwenden

mvn clean deploy

stattdessen.

Auf diese Weise kann Ihr Continuous Integration Server sicherstellen, dass alle Abhängigkeiten korrekt in Ihr Remote-Repository übertragen werden. Wenn Sie eines verpasst haben, kann mvn es nicht in Ihrem lokalen m2-CI-Repository finden.

user1853859
quelle
1
Ich denke, Sie sprechen über MVN Clean
Deployment
2

package - Nimmt den kompilierten Code und verpackt ihn in seinem verteilbaren Format, z. B. einer JAR- oder WAR-Datei. install - Installiert das Paket im lokalen Repository, um es als Abhängigkeit in anderen Projekten lokal zu verwenden

Elilmatha Sivanesan
quelle
2

Der richtige Weg ist, mvn packagewenn Sie die Dinge für den Kern Ihres Builds richtig gemacht haben, sollte es nicht notwendig sein, Ihre Pakete im lokalen Repository zu installieren.

Wenn Sie Travis verwenden, können Sie außerdem Ihre Abhängigkeiten "zwischenspeichern", da dies Ihre nicht berührt, $HOME.m2/repositorywenn Sie das Paket für Ihr eigenes Projekt verwenden.

In der Praxis müssen mvn siteSie normalerweise mvn installvorher eine machen, wenn Sie überhaupt versuchen, eine zu machen . Es gibt einfach zu viele Fehler mit siteoder es gibt zahlreiche schlecht gewartete Plugins.

Archimedes Trajano
quelle
0

Dies hängt davon ab, was Sie nach dem Ändern der Java-Datei erreichen möchten. Bis Sie den Maven-Prozess testen möchten, müssen Sie nie etwas tun. Eclipse / MyEclipse erstellt das Notwendige und platziert die Ausgabe an der entsprechenden Stelle in Ihrem Projekt. Sie können es auch ausführen oder bereitstellen (wenn es sich beispielsweise um ein Webprojekt handelt), ohne dass Sie explizit etwas mit maven tun müssen. Um Ihr Projekt im Maven-Repository zu installieren, müssen Sie am Ende eine Maven-Installation durchführen. Möglicherweise haben Sie auch andere Maven-Ziele, die Sie ausführen möchten, was MyEclipse nicht automatisch tut.

Wie gesagt, es kommt darauf an, was Sie tun wollen.

Tony Weddle
quelle