Mit Netbeans eine “single”-jar-Datei erzeugen

31 Juli, 2009 (12:59) | Java, Tipps | By: joerg

Sobald man externe Bibliotheken einbindet, erstellt Netbeans beim Kompilieren in eine ausführbare jar-Datei im Ordner “dist” die ausführbare Datei und des weiteren einen Ordner “lib” der alle jar-Dateien der Bibliotheken enthält. Will man das Projekt verteilen, so reicht es nicht die ausführbare jar-Datei zu liefern, sondern man muss den Ordner “lib” mit verteilen.

Das mag Vorteile haben: man verteilt nur die sich hauptsächlich ändernde Projektdatei und nicht die sich eher selten ändernden Dateien der Bibliotheken, hat aber auch den Nachteil, dass im Zweifelsfall Dateien beim Empfänger fehlen.

Eine Variante ist es die ausführbare jar-Datei des Projektes und den Ordner “lib” zu zippen und diesen zu versenden, auf das der Empfänger weiß, was er damit tun muss.

Die andere Möglichkeit: alles Notwendige in eine einzelne ausführbare jar-Datei zu packen und nur diese zu verteilen.

Dafür ist die “build.xml” des Projektes wie folgt zu erweitern:

<target name="-post-jar">
 <jar jarfile="dist/project_complete.jar">
  <zipfileset src="${dist.jar}" excludes="META-INF/*" />
  <zipfileset src="${dist.dir}lib/library1.jar" excludes="META-INF/*" />
  <zipfileset src="${dist.dir}lib/library2.jar" excludes="META-INF/*" />
  <manifest>
   <attribute name="Main-Class" value="com.example.mypackage.Main"/>
  </manifest>
 </jar>
</target>

Damit wird im Verzeichnis “dist” eine einzelne jar-Datei “dist_complete.jar” erzeugt, die sowohl die jar-Datei des Projekts enthält, als auch die jar-Dateien der Bibliotheken (hier library1.jar und library2.jar). Die Liste der “zipfileset” kann beliebig fortgesetzt werden und sollte alle Dateien in “lib” umfassen. Das Attribut “Main-Class” muss natürlich auf die korrekte Main-Class verweisen, damit die erstellte “dist_complete.jar” auch ausgeführt wird.

Write a comment