j'ai une appli qui utilise un jar "hsqldb.jar", mon build.xml permet de
fabriquer le jar de l'appli "macave.jar" mais j'aimerais savoir s'il
existe une commande qui permettrait d'inclure, par ant, tous les classes
de "hsqldb.jar" de manière à n'utiliser plus qu'un seul jar ???
j'ai une appli qui utilise un jar "hsqldb.jar", mon build.xml permet de fabriquer le jar de l'appli "macave.jar" mais j'aimerais savoir s'il existe une commande qui permettrait d'inclure, par ant, tous les classes de "hsqldb.jar" de manière à n'utiliser plus qu'un seul jar ???
Hi
Le principe est le suivant :
1) extraire ton jar hsqldb.jar dans un répertoire, ce repertoire tu le gardes bien au chaud.
2) dans ton fichier build.xml, tu as ton entrée de compilation <javac ..../> qui se trouve par exemple dans une target compile (<target name="compile"> ... </target>)
3) tu colles apres une target distrib qui va dependre de compile, dans cette target distrib tu as une entrée <copy><fileset .../></copy> pour copier les classes de ton jar a partir du répertoire ou elle se trouve dans le repertoire ou tu généres tes classes a toi, c'est a dire dans le répertoire ou tes classes son compilées par ta target compile.
4) tu as ensuite une entrée <jar .../> pour creer le jar qui va donc include non seulement tes classes mais aussi celle du jar puisque tu les as copiées.
ca donne : <target name="compile" depends="init" description="compile sources " > <!-- Compile the java code from ${src} into ${classes} --> <javac srcdir="${src}" destdir="${classes}" includes="com/javadevel/ptro/bogen/*.java,com/javadevel/ptro/bogen/sql/*.java,com/javadevel/ptro/bogen/beans/*.java,com/javadevel/ptro/bogen/xml/*.java" classpath="/opt/j2sdk1.4.2_04/jre/lib/rt.jar:." deprecation="yes" /> </target>
<target name="dist" depends="compile" description="generate the distribution" > <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"/> <mkdir dir="${dist}/lib/datas"/>
<!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL --> <!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL --> <!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL --> <!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL --> <copy todir="${classes}/"> <fileset dir="${src}/libs/mysql/" includes="**"/> </copy>
<!-- ICI L'ENTREE QUI CREE LE JAR --> <!-- ICI L'ENTREE QUI CREE LE JAR --> <!-- ICI L'ENTREE QUI CREE LE JAR --> <!-- ICI L'ENTREE QUI CREE LE JAR --> <!-- Put everything in ${classes} into the MyProject-${DSTAMP}.jar file --> <jar jarfile="${dist}/lib/bogen-${DSTAMP}.jar" basedir="${classes}" includes="*.gif,**/*.class" manifest="./manifest" />
j'ai une appli qui utilise un jar "hsqldb.jar", mon build.xml permet de
fabriquer le jar de l'appli "macave.jar" mais j'aimerais savoir s'il
existe une commande qui permettrait d'inclure, par ant, tous les classes
de "hsqldb.jar" de manière à n'utiliser plus qu'un seul jar ???
Hi
Le principe est le suivant :
1) extraire ton jar hsqldb.jar dans un répertoire, ce repertoire
tu le gardes bien au chaud.
2) dans ton fichier build.xml, tu as ton entrée de compilation <javac ..../>
qui se trouve par exemple dans une target compile (<target name="compile"> ... </target>)
3) tu colles apres une target distrib qui va dependre de compile,
dans cette target distrib tu as une entrée <copy><fileset .../></copy>
pour copier les classes de ton jar a partir du répertoire ou elle se trouve
dans le repertoire ou tu généres tes classes a toi, c'est a dire dans le répertoire
ou tes classes son compilées par ta target compile.
4) tu as ensuite une entrée <jar .../> pour creer le jar qui va donc include
non seulement tes classes mais aussi celle du jar puisque tu les as copiées.
ca donne :
<target name="compile" depends="init"
description="compile sources " >
<!-- Compile the java code from ${src} into ${classes} -->
<javac
srcdir="${src}"
destdir="${classes}"
includes="com/javadevel/ptro/bogen/*.java,com/javadevel/ptro/bogen/sql/*.java,com/javadevel/ptro/bogen/beans/*.java,com/javadevel/ptro/bogen/xml/*.java"
classpath="/opt/j2sdk1.4.2_04/jre/lib/rt.jar:."
deprecation="yes"
/>
</target>
<target name="dist" depends="compile"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<mkdir dir="${dist}/lib/datas"/>
<!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL -->
<!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL -->
<!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL -->
<!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL -->
<copy todir="${classes}/">
<fileset dir="${src}/libs/mysql/" includes="**"/>
</copy>
<!-- ICI L'ENTREE QUI CREE LE JAR -->
<!-- ICI L'ENTREE QUI CREE LE JAR -->
<!-- ICI L'ENTREE QUI CREE LE JAR -->
<!-- ICI L'ENTREE QUI CREE LE JAR -->
<!-- Put everything in ${classes} into the MyProject-${DSTAMP}.jar file -->
<jar
jarfile="${dist}/lib/bogen-${DSTAMP}.jar"
basedir="${classes}"
includes="*.gif,**/*.class"
manifest="./manifest"
/>
j'ai une appli qui utilise un jar "hsqldb.jar", mon build.xml permet de fabriquer le jar de l'appli "macave.jar" mais j'aimerais savoir s'il existe une commande qui permettrait d'inclure, par ant, tous les classes de "hsqldb.jar" de manière à n'utiliser plus qu'un seul jar ???
Hi
Le principe est le suivant :
1) extraire ton jar hsqldb.jar dans un répertoire, ce repertoire tu le gardes bien au chaud.
2) dans ton fichier build.xml, tu as ton entrée de compilation <javac ..../> qui se trouve par exemple dans une target compile (<target name="compile"> ... </target>)
3) tu colles apres une target distrib qui va dependre de compile, dans cette target distrib tu as une entrée <copy><fileset .../></copy> pour copier les classes de ton jar a partir du répertoire ou elle se trouve dans le repertoire ou tu généres tes classes a toi, c'est a dire dans le répertoire ou tes classes son compilées par ta target compile.
4) tu as ensuite une entrée <jar .../> pour creer le jar qui va donc include non seulement tes classes mais aussi celle du jar puisque tu les as copiées.
ca donne : <target name="compile" depends="init" description="compile sources " > <!-- Compile the java code from ${src} into ${classes} --> <javac srcdir="${src}" destdir="${classes}" includes="com/javadevel/ptro/bogen/*.java,com/javadevel/ptro/bogen/sql/*.java,com/javadevel/ptro/bogen/beans/*.java,com/javadevel/ptro/bogen/xml/*.java" classpath="/opt/j2sdk1.4.2_04/jre/lib/rt.jar:." deprecation="yes" /> </target>
<target name="dist" depends="compile" description="generate the distribution" > <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"/> <mkdir dir="${dist}/lib/datas"/>
<!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL --> <!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL --> <!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL --> <!-- ICI L'ENTREE COPY QUI COPY LES .class DU DRIVER MYSQL --> <copy todir="${classes}/"> <fileset dir="${src}/libs/mysql/" includes="**"/> </copy>
<!-- ICI L'ENTREE QUI CREE LE JAR --> <!-- ICI L'ENTREE QUI CREE LE JAR --> <!-- ICI L'ENTREE QUI CREE LE JAR --> <!-- ICI L'ENTREE QUI CREE LE JAR --> <!-- Put everything in ${classes} into the MyProject-${DSTAMP}.jar file --> <jar jarfile="${dist}/lib/bogen-${DSTAMP}.jar" basedir="${classes}" includes="*.gif,**/*.class" manifest="./manifest" />
Si, bien sur que si, Ant est tout à fait capable de décompresser une archive jar. C'est d'ailleurs la tache <unjar> qui fait ce boulot.
Ah bon, alors pas de soucis, je peux tout faire avec ant...
Merci pour l'info °;)
-- yt
Trognon Patrice
Yvon Thoraval wrote:
Thomas Nguyen wrote:
Si, bien sur que si, Ant est tout à fait capable de décompresser une archive jar. C'est d'ailleurs la tache <unjar> qui fait ce boulot.
Ah bon, alors pas de soucis, je peux tout faire avec ant...
Merci pour l'info °;)
Hi
Oui bien sur, simplement j'ai extrait mon jar en dehors de ant car je ne voulais pas le faire a chaque fois que je genere ma distribution alors que c'est toujours le meme jar qu'il faut extraire.
Voila
Patrice http://www.javadevel.com
Yvon Thoraval wrote:
Thomas Nguyen <tnguyen@tipeon.net> wrote:
Si, bien sur que si, Ant est tout à fait capable de décompresser une
archive jar. C'est d'ailleurs la tache <unjar> qui fait ce boulot.
Ah bon, alors pas de soucis, je peux tout faire avec ant...
Merci pour l'info °;)
Hi
Oui bien sur, simplement j'ai extrait mon jar en dehors de ant
car je ne voulais pas le faire a chaque fois que je genere
ma distribution alors que c'est toujours le meme jar qu'il
faut extraire.
Si, bien sur que si, Ant est tout à fait capable de décompresser une archive jar. C'est d'ailleurs la tache <unjar> qui fait ce boulot.
Ah bon, alors pas de soucis, je peux tout faire avec ant...
Merci pour l'info °;)
Hi
Oui bien sur, simplement j'ai extrait mon jar en dehors de ant car je ne voulais pas le faire a chaque fois que je genere ma distribution alors que c'est toujours le meme jar qu'il faut extraire.
Voila
Patrice http://www.javadevel.com
yvon.thoravalNO-SPAM
Trognon Patrice wrote:
Oui bien sur, simplement j'ai extrait mon jar en dehors de ant car je ne voulais pas le faire a chaque fois que je genere ma distribution alors que c'est toujours le meme jar qu'il faut extraire.
Ouais, ouais, j'ai un peu le même problème, en + des classes je met dans mon jar : **/*.properties **/*.html **/*.txt **/*.gif **/*.jpg **/*.png
il faudrait que je mette au point un systeme avec paramètres du genre :
ant (sans param ne fait que compiler et rafraichi classes/) ant html (ajoute les *.html ds classes) etc... ant all (refait à neuf le rép classes avant de compacter)... -- yt
Oui bien sur, simplement j'ai extrait mon jar en dehors de ant
car je ne voulais pas le faire a chaque fois que je genere
ma distribution alors que c'est toujours le meme jar qu'il
faut extraire.
Ouais, ouais, j'ai un peu le même problème, en + des classes je met dans
mon jar :
**/*.properties
**/*.html
**/*.txt
**/*.gif
**/*.jpg
**/*.png
il faudrait que je mette au point un systeme avec paramètres du genre :
ant (sans param ne fait que compiler et rafraichi classes/)
ant html (ajoute les *.html ds classes)
etc...
ant all (refait à neuf le rép classes avant de compacter)...
--
yt
Oui bien sur, simplement j'ai extrait mon jar en dehors de ant car je ne voulais pas le faire a chaque fois que je genere ma distribution alors que c'est toujours le meme jar qu'il faut extraire.
Ouais, ouais, j'ai un peu le même problème, en + des classes je met dans mon jar : **/*.properties **/*.html **/*.txt **/*.gif **/*.jpg **/*.png
il faudrait que je mette au point un systeme avec paramètres du genre :
ant (sans param ne fait que compiler et rafraichi classes/) ant html (ajoute les *.html ds classes) etc... ant all (refait à neuf le rép classes avant de compacter)... -- yt
Trognon Patrice
Yvon Thoraval wrote:
Trognon Patrice wrote:
Oui bien sur, simplement j'ai extrait mon jar en dehors de ant car je ne voulais pas le faire a chaque fois que je genere ma distribution alors que c'est toujours le meme jar qu'il faut extraire.
Ouais, ouais, j'ai un peu le même problème, en + des classes je met dans mon jar : **/*.properties **/*.html **/*.txt **/*.gif **/*.jpg **/*.png
il faudrait que je mette au point un systeme avec paramètres du genre :
ant (sans param ne fait que compiler et rafraichi classes/) ant html (ajoute les *.html ds classes) etc... ant all (refait à neuf le rép classes avant de compacter)...
ben oui, tu créé differentes targets et ca va le faire.
Oui bien sur, simplement j'ai extrait mon jar en dehors de ant
car je ne voulais pas le faire a chaque fois que je genere
ma distribution alors que c'est toujours le meme jar qu'il
faut extraire.
Ouais, ouais, j'ai un peu le même problème, en + des classes je met dans
mon jar :
**/*.properties
**/*.html
**/*.txt
**/*.gif
**/*.jpg
**/*.png
il faudrait que je mette au point un systeme avec paramètres du genre :
ant (sans param ne fait que compiler et rafraichi classes/)
ant html (ajoute les *.html ds classes)
etc...
ant all (refait à neuf le rép classes avant de compacter)...
ben oui, tu créé differentes targets et ca va le faire.
Oui bien sur, simplement j'ai extrait mon jar en dehors de ant car je ne voulais pas le faire a chaque fois que je genere ma distribution alors que c'est toujours le meme jar qu'il faut extraire.
Ouais, ouais, j'ai un peu le même problème, en + des classes je met dans mon jar : **/*.properties **/*.html **/*.txt **/*.gif **/*.jpg **/*.png
il faudrait que je mette au point un systeme avec paramètres du genre :
ant (sans param ne fait que compiler et rafraichi classes/) ant html (ajoute les *.html ds classes) etc... ant all (refait à neuf le rép classes avant de compacter)...
ben oui, tu créé differentes targets et ca va le faire.
Pat.
Frédéric Lachasse
"Yvon Thoraval" wrote in message news:1gl19cj.1m0g712ifbe3pN%
j'ai une appli qui utilise un jar "hsqldb.jar", mon build.xml permet de fabriquer le jar de l'appli "macave.jar" mais j'aimerais savoir s'il existe une commande qui permettrait d'inclure, par ant, tous les classes de "hsqldb.jar" de manière à n'utiliser plus qu'un seul jar ???
Tu peux ajouter un <zipgroupfileset> dans ta tâche <jar> pour inclure le contenu d'un jar (jar étant un zip) dans ton jar. Disponible avec ant 1.5+.
-- Frédéric Lachasse - ECP86
"Yvon Thoraval" <yvon.thoravalNO-SPAM@free.fr> wrote in message
news:1gl19cj.1m0g712ifbe3pN%yvon.thoravalNO-SPAM@free.fr...
j'ai une appli qui utilise un jar "hsqldb.jar", mon build.xml permet de
fabriquer le jar de l'appli "macave.jar" mais j'aimerais savoir s'il
existe une commande qui permettrait d'inclure, par ant, tous les classes
de "hsqldb.jar" de manière à n'utiliser plus qu'un seul jar ???
Tu peux ajouter un <zipgroupfileset> dans ta tâche <jar> pour inclure le
contenu d'un jar (jar étant un zip) dans ton jar. Disponible avec ant 1.5+.
"Yvon Thoraval" wrote in message news:1gl19cj.1m0g712ifbe3pN%
j'ai une appli qui utilise un jar "hsqldb.jar", mon build.xml permet de fabriquer le jar de l'appli "macave.jar" mais j'aimerais savoir s'il existe une commande qui permettrait d'inclure, par ant, tous les classes de "hsqldb.jar" de manière à n'utiliser plus qu'un seul jar ???
Tu peux ajouter un <zipgroupfileset> dans ta tâche <jar> pour inclure le contenu d'un jar (jar étant un zip) dans ton jar. Disponible avec ant 1.5+.
-- Frédéric Lachasse - ECP86
yvon.thoravalNO-SPAM
Frédéric Lachasse wrote:
Tu peux ajouter un <zipgroupfileset> dans ta tâche <jar> pour inclure le contenu d'un jar (jar étant un zip) dans ton jar. Disponible avec ant 1.5+.
Merci, c'est très intéressant, pour l'instant j'ai ça :
<jar jarfile="lib/${app}" basedir="${dst}"> <manifest> <attribute name ="Main-Class" value="yt.ui.MaCave"/> <attribute name ="Class-Path" value="lib/hsqldb.jar lib/macave.jar"/> </manifest> </jar>
Ton conseil ma donné l'idée de lire le manuel à la page : <http://ant.apache.org/manual/CoreTypes/zipfileset.html> qui dit : Examples
zips all files in the htdocs/manual directory into the docs/user-guide directory in the archive, adds the file ChangeLog27.txt in the current directory as docs/ChangeLog.txt, and includes all the html files in examples.zip under docs/examples. The archive might end up containing the files: docs/user-guide/html/index.html docs/ChangeLog.txt docs/examples/index.html
Donc je peux changer ma task ant en qqc comme : <jar jarfile="lib/${app}"> <manifest> <attribute name ="Main-Class" value="yt.ui.MaCave"/> <attribute name ="Class-Path" value="lib/macave.jar"/> </manifest> <zipfileset dir="classes/yt" prefix="yt"/> <zipfileset dir="lib/hsqldb.jar" prefix="."/> <!-- verifier le prefix /--> </jar> En tout cas merci pour ton info je vai faire qq essais asap...
zips all files in the htdocs/manual directory into the
docs/user-guide directory in the archive, adds the file ChangeLog27.txt
in the current directory as docs/ChangeLog.txt, and includes all the
html files in examples.zip under docs/examples. The archive might end up
containing the files:
docs/user-guide/html/index.html
docs/ChangeLog.txt
docs/examples/index.html
Donc je peux changer ma task ant en qqc comme :
<jar jarfile="lib/${app}">
<manifest>
<attribute name ="Main-Class"
value="yt.ui.MaCave"/>
<attribute name ="Class-Path"
value="lib/macave.jar"/>
</manifest>
<zipfileset dir="classes/yt" prefix="yt"/>
<zipfileset dir="lib/hsqldb.jar" prefix="."/>
<!-- verifier le prefix /-->
</jar>
En tout cas merci pour ton info je vai faire qq essais asap...
zips all files in the htdocs/manual directory into the docs/user-guide directory in the archive, adds the file ChangeLog27.txt in the current directory as docs/ChangeLog.txt, and includes all the html files in examples.zip under docs/examples. The archive might end up containing the files: docs/user-guide/html/index.html docs/ChangeLog.txt docs/examples/index.html
Donc je peux changer ma task ant en qqc comme : <jar jarfile="lib/${app}"> <manifest> <attribute name ="Main-Class" value="yt.ui.MaCave"/> <attribute name ="Class-Path" value="lib/macave.jar"/> </manifest> <zipfileset dir="classes/yt" prefix="yt"/> <zipfileset dir="lib/hsqldb.jar" prefix="."/> <!-- verifier le prefix /--> </jar> En tout cas merci pour ton info je vai faire qq essais asap...
-- yt
Frédéric Lachasse
"Yvon Thoraval" wrote in message news:1gl4do4.1om5i5y1htzkosN%
Frédéric Lachasse wrote:
Tu peux ajouter un <zipgroupfileset> dans ta tâche <jar> pour inclure le contenu d'un jar (jar étant un zip) dans ton jar. Disponible avec ant 1.5+.
Merci, c'est très intéressant, pour l'instant j'ai ça :
<jar jarfile="lib/${app}" basedir="${dst}"> <manifest> <attribute name ="Main-Class" value="yt.ui.MaCave"/> <attribute name ="Class-Path" value="lib/hsqldb.jar lib/macave.jar"/> </manifest> </jar>
Ton conseil ma donné l'idée de lire le manuel à la page : <http://ant.apache.org/manual/CoreTypes/zipfileset.html> qui dit : Examples
zips all files in the htdocs/manual directory into the docs/user-guide directory in the archive, adds the file ChangeLog27.txt in the current directory as docs/ChangeLog.txt, and includes all the html files in examples.zip under docs/examples. The archive might end up containing the files: docs/user-guide/html/index.html docs/ChangeLog.txt docs/examples/index.html
Donc je peux changer ma task ant en qqc comme : <jar jarfile="lib/${app}"> <manifest> <attribute name ="Main-Class" value="yt.ui.MaCave"/> <attribute name ="Class-Path" value="lib/macave.jar"/> </manifest> <zipfileset dir="classes/yt" prefix="yt"/> <zipfileset dir="lib/hsqldb.jar" prefix="."/> <!-- verifier le prefix /--> </jar> En tout cas merci pour ton info je vai faire qq essais asap...
Pourquoi "Class-Path: lib/macave.jar" dans le manifest?
<zipfileset dir="lib/hsqldb.jar" prefix="."/> Ce n'est probablement pas ce que tu veux faire: cela met hsqldb.jar dans ton jar comme une resource, alors que tu veux inclure les classes de hsqldb.jar dans ton jar.
Ce que tu veux est fait par <zipgroupfileset>.
Une autre possibilité est d'utiliser la library classworlds dans un uberjar. Cela permet de packager une application former de plusieurs jars dans un seul jar directement exécutable.
Voir http://classworlds.codehaus.org/uberjar.html
-- Frédéric Lachasse - ECP86
"Yvon Thoraval" <yvon.thoravalNO-SPAM@free.fr> wrote in message
news:1gl4do4.1om5i5y1htzkosN%yvon.thoravalNO-SPAM@free.fr...
zips all files in the htdocs/manual directory into the
docs/user-guide directory in the archive, adds the file ChangeLog27.txt
in the current directory as docs/ChangeLog.txt, and includes all the
html files in examples.zip under docs/examples. The archive might end up
containing the files:
docs/user-guide/html/index.html
docs/ChangeLog.txt
docs/examples/index.html
Donc je peux changer ma task ant en qqc comme :
<jar jarfile="lib/${app}">
<manifest>
<attribute name ="Main-Class"
value="yt.ui.MaCave"/>
<attribute name ="Class-Path"
value="lib/macave.jar"/>
</manifest>
<zipfileset dir="classes/yt" prefix="yt"/>
<zipfileset dir="lib/hsqldb.jar" prefix="."/>
<!-- verifier le prefix /-->
</jar>
En tout cas merci pour ton info je vai faire qq essais asap...
Pourquoi "Class-Path: lib/macave.jar" dans le manifest?
<zipfileset dir="lib/hsqldb.jar" prefix="."/>
Ce n'est probablement pas ce que tu veux faire: cela met hsqldb.jar dans ton
jar comme une resource, alors que tu veux inclure les classes de hsqldb.jar
dans ton jar.
Ce que tu veux est fait par <zipgroupfileset>.
Une autre possibilité est d'utiliser la library classworlds dans un uberjar.
Cela permet de packager une application former de plusieurs jars dans un
seul jar directement exécutable.
zips all files in the htdocs/manual directory into the docs/user-guide directory in the archive, adds the file ChangeLog27.txt in the current directory as docs/ChangeLog.txt, and includes all the html files in examples.zip under docs/examples. The archive might end up containing the files: docs/user-guide/html/index.html docs/ChangeLog.txt docs/examples/index.html
Donc je peux changer ma task ant en qqc comme : <jar jarfile="lib/${app}"> <manifest> <attribute name ="Main-Class" value="yt.ui.MaCave"/> <attribute name ="Class-Path" value="lib/macave.jar"/> </manifest> <zipfileset dir="classes/yt" prefix="yt"/> <zipfileset dir="lib/hsqldb.jar" prefix="."/> <!-- verifier le prefix /--> </jar> En tout cas merci pour ton info je vai faire qq essais asap...
Pourquoi "Class-Path: lib/macave.jar" dans le manifest?
<zipfileset dir="lib/hsqldb.jar" prefix="."/> Ce n'est probablement pas ce que tu veux faire: cela met hsqldb.jar dans ton jar comme une resource, alors que tu veux inclure les classes de hsqldb.jar dans ton jar.
Ce que tu veux est fait par <zipgroupfileset>.
Une autre possibilité est d'utiliser la library classworlds dans un uberjar. Cela permet de packager une application former de plusieurs jars dans un seul jar directement exécutable.