Gibt es irgendein Maven-Ziel, das "dist" ähnlich ist?

8

Ich arbeite an einem Projekt, das ant verwendet. Ich hatte ein Ziel dist , das im Grunde jar zuerst tun würde, und dann installiere die Anwendung in ein Verzeichnis.

Das heißt, es würde Verzeichnisse wie bin/ , lib/ und config/ im Installationsverzeichnis erstellen und dann die relevanten Dateien in jedes dieser Verzeichnisse kopieren.

Meine Frage ist zweifach:

  1. Gibt es irgendein Maven-Ziel, das so etwas macht?
  2. Wenn nicht, möchte ich maven dist machen und dies geschehen lassen. Wie würdest du vorschlagen, dass ich das mit Maven bewerkstellige?
  3. Wenn ich nicht mein eigenes "Ziel" haben kann (wie dist), was wäre dann der beste Weg?

Bottom line: Ich möchte all dies tun, aber ich möchte nicht das Verhalten der Standardziele wie Kompilieren und Paket ändern.

Danke, jrh

PS: Ich benutze die Maven-Version 2.2.21

    
jrharshath 22.11.2010, 13:41
quelle

4 Antworten

6

Ich weiß nicht, was in config gehen würde, aber lib und bin ist einfach.

Um alle Abhängigkeiten in einen Ordner zu kopieren , tun Sie es einfach das:

%Vor%

Um Ihr jar in einen bin-Ordner auszugeben, tun Sie dies ( Referenzseite ) ):

%Vor%

Ah, es gibt zusätzliche Anforderungen:

  

Bottom line: Ich möchte all dies tun, aber ich möchte nicht das Verhalten der Standard "Ziele" wie Kompilieren und Paket etc ändern.

In diesem Fall würde ich ein Profil verwenden, um dies zu aktivieren:

%Vor%

Nun würden Sie mvn clean package -Pdist verwenden, um Ihr dist-Verzeichnis zu erhalten, und wenn Sie das Profil nicht hinzufügen, erhalten Sie das Standardverhalten.

Grundsätzlich funktionieren Dinge in Maven anders als bei Ameisen. Es gibt keine Ziele, es gibt nur Lebenszyklusphasen und Plugin-Ziele.

Sie können entweder eine Lebenszyklusphase ausführen, die alle maven plugin Ziele aufruft, die an alle Phasen bis zu dieser Phase gebunden sind (zB wenn Sie mvn compile ausführen, werden die folgenden Phasen ausgeführt: validate , initialize , generate-sources , process-sources , generate-resources , process-resources , compile ). Aber es gibt keine (einfache) Möglichkeit, eine Lebenszyklusphase namens dist zu definieren.

Oder Sie können ein bestimmtes Plugin-Ziel ausführen (Sie können tatsächlich mehrere Phasen und / oder Plugin-Ziele ausführen). Z.B. Sie könnten Ihr eigenes dist-Plugin schreiben und es mit mvn dist:dist aufrufen, aber ich würde das nicht empfehlen, da Sie die vorhandenen Funktionen verwenden und die Profillösung ziemlich gut passen sollte.

    
Sean Patrick Floyd 22.11.2010, 13:54
quelle
1

Sie könnten versuchen, einen Assembly-Deskriptor für Assembly-Plugin (oder suche Google nach einem passenden).

So ähnlich

%Vor%

erstellt ${project.artifactId}-dist.zip in Ihrem target -Verzeichnis. Die Zip-Datei wird wie

angelegt %Vor%

Es sieht so aus, als würde das Assembly-Plugin nur komprimierte Dateien erstellen, es wird nicht einfach in einen dist -Ordner kopiert.

    
agnul 08.07.2011 12:56
quelle
1

Seans Antwort ist gut und ich ging fast darauf los, bis ich von dem Appassembler-Plugin Ссылка .

Sehen Sie hier ein Beispiel Ссылка

Es wird als Teil des Paketlebenszyklus aufgerufen.

%Vor%

Die Deskriptoren, auf die es verweist, sind ziemlich direkt und es erstellt auch ein Stapel- und Shell-Skript, damit Sie Ihre Anwendung ausführen können!

    
opticyclic 25.05.2012 09:01
quelle
0

Sie können nicht maven dist haben, mit NetBeans (und anderen IDEs, glaube ich) können Sie eine benutzerdefinierte Aktion erstellen. co_de% wird als dist (oder mvn install -Pdist , wie von Sean vorgeschlagen) ausgeführt.

    
simpatico 05.05.2011 15:55
quelle

Tags und Links