2010-03-25 3 views
25

Ich möchte ein Zip-Archiv meines "target" -Verzeichnisses ($ {project.build.directory) erstellen. die Verwendung des maven-assembly-plugins scheint mir für eine so einfache Aufgabe übertrieben zu sein (und ein bisschen kompliziert - warum muss ich eine andere Datei verwenden, den Assembly-Deskriptor für eine solche Aufgabe) Ich kann das scheinbar einfachere nicht finden maven-zip-plugin im http://repo1.maven.org/maven2 Repository.Erstellen eines Zip-Archivs des maven "target" -Verzeichnisses

Irgendwelche Eingaben?

Antwort

47

Wenn die bin vordefinierte Assembly Descriptor nicht Ihren Anforderungen entspricht, dann haben Sie drei Möglichkeiten:

  1. Mit der Maven-Montage-Plugin - Die Maven-zip-Plugin kam nie, weil die Montage-Plugin aus kann alles tun, was das Zip-Plugin tat, und mehr, siehe MNG-2243.
  2. Mit dem Maven-Antrun-Plugin (und vielleicht das Build-Helfer-Plugin zum Anhängen der Zip) - Es gibt ein Beispiel here (und das sieht ausführlicher als das Assembly-Plugin am Ende).
  3. Schreiben Sie Ihr eigenes Plugin - warum würden Sie dies tun, wenn Sie das Assembly-Plugin haben.

Persönlich würde ich nur die Maven-Montage-Plugin mit dem folgenden zip.xml Descriptor:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>bin</id> 
    <baseDirectory>/</baseDirectory> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.directory}</directory> 
    </fileSet> 
    </fileSets> 
</assembly> 

Und in Ihrem POM:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptors> 
     <descriptor>src/main/assembly/zip.xml</descriptor> 
    </descriptors> 
    </configuration> 
    <executions> 
    <execution> 
     <id>make-assembly</id> <!-- this is used for inheritance merges --> 
     <phase>package</phase> <!-- append to the packaging phase. --> 
     <goals> 
     <goal>single</goal> <!-- goals == mojos --> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
+0

Funktioniert nicht - der eingebaute "bin" ist benutzt. Und ich kann nicht herausfinden, wie man auf benutzerdefinierte nicht eingebaute zeigt. –

+0

Es gibt einen Vorteil der Verwendung des antrun-Plugins gegenüber dem Assembly-Plugin, da die Dateigrößen innerhalb der zip-Datei unterschiedlich gespeichert werden.Wenn Sie die Zip-Datei mit 'ZipInputStream' lesen und 'getSize()' verwenden, erhalten Sie die Eintragsgröße mit Reißverschlüssen, die von antrun erstellt wurden. Für mit assembly erstellte Reißverschlüsse wird -1 zurückgegeben. –

11

Wenn Sie keine "speziellen" Anforderungen für die generierte ZIP-Datei haben, können Sie einen der vordefinierten Maven Assembly Deskriptoren verwenden. Mit den vordefinierten Assembly-Deskriptoren können Sie schnell und einfach bestimmte Assemblys erstellen, ohne einen eigenen Assembly-Deskriptor bereitstellen zu müssen. Angenommen, Sie möchten den vordefinierten Deskriptor bin verwenden. Dann in der plugins Abschnitt Ihres POM build Abschnitt, können Sie einfach Folgendes hinzufügen.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptorRefs> 
     <descriptorRef>bin</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
</plugin> 

Natürlich, wie immer mit Maven, wenn Sie etwas über die Standardkonfiguration tun wollen, müssen Sie Ihre eigene Konfiguration, und in diesem Fall zu schaffen, das heißt Ihre eigene Assembly Descriptor.

Die Liste der vordefinierten Deskriptoren ist dokumentiert here.

+0

Nicht schlecht Optionen. Doch am Ende meines Prozesses enthält das Zielverzeichnis einfach eine EXE-Datei und ein Verzeichnis mit anderen EXE-Dateien - allen Installateuren. Ich möchte sie einfach alle zusammen zippen – Yaneeve

+0

Ihr Problem ist also, dass die Standarddeskriptoren mehr als Sie benötigen, wie den Inhalt der Arbeitsordner, usw.? Gibt es einen bestimmten Ordner unter Ziel, den Sie packen möchten (z. B. $ {project.build.directory}/installers), aber Sie möchten, dass die anderen Verzeichnisse weggelassen werden? Oder haben Sie ein anderes Ziel? – RTBarnard

+0

Ich hatte alle unerwünschten Dateien und Verzeichnisse aus dem Verzeichnis $ {project.build.directory} gelöscht und wollte nur den Inhalt vollständig zippen. Wenn Sie keinen besseren Vorschlag als Pascal haben, denke ich, muss ich nur diese "redundante" Assembly-Datei erstellen, da er gezeigt und sich für seine Lösung entschieden hat ... – Yaneeve