[Maven] Mit Maven ZIP Archiv erstellen / deployen Tutorial

Mit Maven ZIP Archiv erstellen

Wer kennt es nicht? Man hat eine Software (eine JAR Datei), die man als ZIP Archiv ausliefern will (z.B. um sie auf einer Download Seite zur Verfügung zu stellen) und muss diese ZIP Dateien noch von Hand erstellen. Heute zeige ich euch, wie ihr diese ZIP Archive automatisch von Maven generieren lassen könnt.

ZIP Archiv (GPL Lizenz, Quelle: https://www.iconfinder.com/icons/7034/compressed_document_file_zip_icon)

ZIP Archiv, GPL Lizenz, Quelle: Link

 

Was ist Maven?

Maven ist ein Build Tool, wie Gradle oder Ant. Wer Maven noch nicht kennt, sollte sich zuvor folgende Tutorials durchlesen:

 

Die Maven Konfiguration (pom.xml)

Um das ZIP Archiv automatisch generieren lassen zu können, sind bei uns 2 Dateien notwendig:

  • die pom.xml eures Maven Projektes
  • eine assembly.xml (beschreibt, wie das ZIP Archiv aussehen soll)

 

Zuerst zu eurer pom.xml.

Hier muss das maven-assembly-plugin eingefügt werden:

 

In diesem Fall gebe ich mit

bereits an, dass zur MANIFEST Datei der JAR ein Classpath hinzugefügt werden soll und mit

teile ich Maven mit, dass im Ordner lib alle Libraries JARs liegen, aus denen er zur Laufzeit JARs laden kann (Classpath). Auch die Main Klasse gebe ich im Plugin an, wobei dies vermutlich nicht unbedingt notwendig ist.

 

Interessant wird es erst hier:

Hier gebe ich den Pfad zur assembly.xml Datei an, in der wir Maven beschreiben können, wie er diese ZIP Datei aufbauen soll.

 

Außerdem benötigt evtl. noch das maven-dependencie-plugin, falls ihr all eure dependencies (JAR libraries) in den Ordner lib kopieren wollt, damit dieser mit in das ZIP Archiv kopiert werden kann:

 

Meine komplette pom.xml sieht übrigens wie folgt aus:

 

Der Aufbau des ZIP Archivs in der assembly.xml beschreiben

Jetzt kommen wir zum interessanterem Teil:
Wir wollen Maven beschreiben, wie er die ZIP Datei aufbauen soll, welche Ordner & Dateien (z.B. Konfigurationsdateien) er mit rein kopieren soll.

Die assembly.xml muss im Source Ordner src/main/assembly liegen. Kompletter Pfad: src/main/assembly/assembly.xml

 

Diese sieht bei mir wie folgt aus:

 

Gehen wir die Abschnitte einmal einzeln durch.

 

Hier definieren wir, dass wir eine ZIP Datei generieren lassen wollen. Mit dem assembly Plugin von Maven sind auch andere Dateiformate (z.B. RAR) möglich.

 

Hier sagen wir Maven, dass er das Projekt Verzeichnis nicht 1 : 1 mit in die ZIP kopieren soll. Dies würde bedeuten, dass auch alle Sources und der target Ordner mit in die ZIP gelangen, was aber nicht unser Ziel ist.

 

Mit <fileset>…</fileset> sagen wir Maven, welche Ordner oder Dateien wir mit in die ZIP kopieren lassen wollen. Mit <exclude>…</exclude> können wir einzelne Dateien, Dateiformate, Dateimuster (Regex) und Ordner davon ausnehmen, sodass diese nicht mit in die ZIP gelangen. Das selbe gibt es auch für include. <outputDirectory>…</outputDirectory> bezeichnet hierbei den Ordner, wie er in der ZIP heißen soll.

 

Hier definieren wir also, dass Maven beim Build einen Ordner “data” anlegen und dabei den Inhalt des Ordners “data” im / Verzeichnis reinkopieren soll.

Allerdings schließen wir hier Konfigurationsdateien aus, weil diese nicht mit in den data Ordner sollen. Dies kann z.B. auch bei eurem config Ordner sinnvoll sein, wenn dort sensible Informationen gespeichert sind und diese nicht mit in die ZIP gelangen sollen.

 

Wenn ihr alles richtig gemacht habt, findet ihr nun nach einem Maven “clean install” eure ZIP imtargetOrdner.

target Ordner mit ZIP Archiv

Bei mir sieht der Ordner vermutlich etwas anders aus, als bei euch, aber die ZIP Datei sollte auch bei euch vorhanden sein.

 

Die ZIP Datei sieht bei mir jetzt so aus:

Maven ZIP Archiv erstellen

Maven ZIP Archiv erstellen

 

Wenn euch dieser Artikel gefallen hat oder ihr Verbesserungswünsche äußern wollt, würde ich mich über Kommentare freuen!

Feedback hilft mir, bessere Tutorials zu schreiben und besser auf eure Fragen einzugehen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.