[Netbeans] "Fat" JAR-Archive - Abhängigkeiten mit packen
Netbeans bietet auf GUI Ebene keine Möglichkeit im Projekt verknüpfte JAR Libarys beim Build des Projektes mit in das JAR Archiv zu packen, sodass man alles was man für das Programm benötigt in einer Datei hat.
Standardmäßig wird im Projektunterordner dist/ immer ein Ordner lib/ angelegt, wo alle benötigten Libarys separat abgelegt werden.
Um das zu ändern, muss man ein wenig Hand anlegen und die build.xml im Projektverzeichnis bearbeiten. Dazu verwendet man einfach das File-View, welches man unter Window » Files finden kann. Die build.xml kann dann einfach mit Netbeans geöffnet werden.
Nun muss am Ende der build.xml vor dem </project>-Tag folgendes eingefügt werden:
<target name="-unjar-and-copy-lib-jars">
<unjar dest="${build.classes.dir}">
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<patternset>
<exclude name="META-INF/**"/>
<exclude name="/*"/>
</patternset>
</unjar>
</target>
<target depends="init,compile,-pre-pre-jar,-pre-jar,-unjar-and-copy-lib-jars" name="fat-jar">
<property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
<jar destfile="${dist.jar}">
<fileset dir="${build.classes.dir}"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<echo>To run this application from the command line without Ant, try:</echo>
<property location="${dist.jar}" name="dist.jar.resolved"/>
<echo>java -jar "${dist.jar.resolved}"</echo>
</target>
<target depends="clean,fat-jar" name="clean-and-fat-jar"/>
Wie in Zeile 3 des Schnipsels festgelegt, müssen nun alle benötigten Libarys im Unterordner lib/ des Projektes abgelegt werden. Danach noch eventuell die Verknüpfung der Libs innerhalb des Projektes (via GUI, Libaries » Add JAR/Folder...) ändern.
Wenn man nun einen Rechtklick auf die build.xml macht, sollte man unter Run Target » Other Targets den Menüpunkt fat-jar finden. Genau das Run Target muss ausgeführt werden.
Wenn man nun das JAR-Archiv, was sich in dist/ befindet, in einen anderen Ordner verschiebt, sollte es trotzdem noch lauffähig sein. ![]()
Ich find es sehr merkwürdig das Netbeans dieses Feature nicht auf GUI-Ebene mitbringt und finde, dass Oracle da dringend nacharbeiten muss!
via joshuaborn.info
Verwandte Beiträge
- HashMap - Das assoziative, dynamische Array in Java (Java, Programmieren)
- IP/Subnetz Rechner + Wetter Script (Java, Programmieren)
- Gitolite, Gitweb und private Repositories (Programmieren)
- Schnipseldatenbank zieht nach Git um (Programmieren)
- ExtJS Gridpanel - Undokumentierte Features (Programmieren)








Das rüstet unter anderem upload on save nach.
http://www.aptana.com/