OVH Cloud OVH Cloud

NetBeans et NoClassDefFoundError

5 réponses
Avatar
Népomucène
Bonjour,

J'utilise NetBeans 5.0 et souhaite générer des fichiers JAR
exécutables sur n'importe quelle machine ayant la JVM.

J'ai tout d'abord repris une application développée avec NetBeans 3.5.1.
NetBeans 5.0 m'a alors généré sans problème un JAR exécutable.

Voulant profiter de "Matisse", j'ai ouvert ensuite un projet "Test".
J'ai créé un JFrame Form avec l'assistant
en plaçant JPanel, Jlabels, JTextFields et JComboBox
avec une facilité déconcertante.

Ce test fonctionne parfaitement DANS NetBeans 5.0

En revanche, si je le lance directement depuis Windows, j'obtiens :

Exception in thread "main" java.lang.NoClassDefFoundError:
org/jdesktop/layout/GroupLayout$Group
at test.Main.main(Main.java:26)


J'ai le même type de problème si j'utilise une librairie
de classes que j'ai développée.

Existe-t-il une solution simple pour que NB prenne en compte les
librairies nécessaires au moment de la génération du fichier JAR ?

- si c'est une question de manifest.mf quelle est la ligne à ajouter ?
- si c'est un problème Ant, quelle est la clé à modifier (et comment ?)
- si c'est une question de classpath j'ai besoin de conseils

5 réponses

Avatar
flipouk
Existe-t-il une solution simple pour que NB prenne en compte les
librairies nécessaires au moment de la génération du fichier JAR ?
Non. Le mieux est de dézipper ton jar contenant ta lib extérieure dans

le répertoire build/classes, puis de créer ton jar exécutable. Il existe
une tâche ant pour cela : unzip.
http://ant.apache.org/manual/CoreTasks/unzip.html

Si tu peux garder tes jars à l'extérieur de ton jar exécutable, il faut
effectivement :

- Soit lancer ton appli avec l'option cp. Par ex. :
java -cp /path/to/jar1:/path/to/jar2 com.package.Appli

- Soit ajouter une entrée 'Class-Path' dans ton manifest :
http://java.sun.com/docs/books/tutorial/jar/manifest/downman.html

Tu peux bien évidemment automatiser cela avec ant. Voici par exemple la
tâche 'JAR' de mon build.xml :

<!-- TASK: JAR -->
<target name="jar" depends="compile">
<mkdir dir="${dist}"/>
<jar jarfile="${dist}/${jarname}" compress="true">
<fileset dir="${build}"/>
<fileset dir="${lib}/exp"/>
<manifest>
<attribute name="Main-Class" value="${main}"/>
<attribute name="Class-Path" value="${lib}"/>
</manifest>
</jar>
</target>

J'ai bien cherché et j'ai demandé un peu partout, je ne pense pas que NB
le fasse. J'ai ajouté une demande à la wishlist pour avoir cette
possibilité de générer des jars exécutable qui intègrent les libs que
l'on utilise. D'après ce que j'ai compris, JBuilder le fait ( à
confirmer). Avec un peu de chance, la version finale de NB 5 le fera.

A+

F.

Avatar
Népomucène
Merci Flipouk

J'ai utilisé la solution : "ajouter une entrée 'Class-Path' dans ton
manifest" pour me décoincer de ce problème.

Dès que j'ai un peu de temps, je vais explorer systématiquement tes
autres sugestions. Je suppose que la vraie maîtrise passe par ANT.

Merci encore pour m'avoir indiqué directement les tâches ANT à tester.

J'ai aussi que tu cherches un convertisseur C vers Java.
J'en ai vu un par hasard à :

http://www.01net.com/telecharger/windows/Programmation/java/fiches/22048.html

Je n'ai aucune idée de son efficacité ...

Bonne chance ...

Existe-t-il une solution simple pour que NB prenne en compte les
librairies nécessaires au moment de la génération du fichier JAR ?


Non. Le mieux est de dézipper ton jar contenant ta lib extérieure dans
le répertoire build/classes, puis de créer ton jar exécutable. Il existe
une tâche ant pour cela : unzip.
http://ant.apache.org/manual/CoreTasks/unzip.html

Si tu peux garder tes jars à l'extérieur de ton jar exécutable, il faut
effectivement :

- Soit lancer ton appli avec l'option cp. Par ex. :
java -cp /path/to/jar1:/path/to/jar2 com.package.Appli

- Soit ajouter une entrée 'Class-Path' dans ton manifest :
http://java.sun.com/docs/books/tutorial/jar/manifest/downman.html

Tu peux bien évidemment automatiser cela avec ant. Voici par exemple la
tâche 'JAR' de mon build.xml :

<!-- TASK: JAR -->
<target name="jar" depends="compile">
<mkdir dir="${dist}"/>
<jar jarfile="${dist}/${jarname}" compress="true">
<fileset dir="${build}"/>
<fileset dir="${lib}/exp"/>
<manifest>
<attribute name="Main-Class" value="${main}"/>
<attribute name="Class-Path" value="${lib}"/>
</manifest>
</jar>
</target>

J'ai bien cherché et j'ai demandé un peu partout, je ne pense pas que NB
le fasse. J'ai ajouté une demande à la wishlist pour avoir cette
possibilité de générer des jars exécutable qui intègrent les libs que
l'on utilise. D'après ce que j'ai compris, JBuilder le fait ( à
confirmer). Avec un peu de chance, la version finale de NB 5 le fera.

A+

F.



Avatar
flipouk
Népomucène wrote:
Dès que j'ai un peu de temps, je vais explorer systématiquement tes
autres sugestions. Je suppose que la vraie maîtrise passe par ANT.


Je le crois aussi. Ma vie de dév Java a changé le jour où je me suis
décidé à comprendre ANT.

J'ai aussi que tu cherches un convertisseur C vers Java.
J'en ai vu un par hasard à :

http://www.01net.com/telecharger/windows/Programmation/java/fiches/22048.html


Merci pour ce lien. Malheureusement, c'est un programme pour Windows et
je suis sous Linux. Je me suis finalement lancé dans le conversion de
mon programme à la main. Le C n'est pas si compliqué que cela quand
c'est bien écrit :)

Amicalement,

F.

Avatar
cilovie
flipouk wrote:
Népomucène wrote:

Dès que j'ai un peu de temps, je vais explorer systématiquement tes
autres sugestions. Je suppose que la vraie maîtrise passe par ANT.



Je le crois aussi. Ma vie de dév Java a changé le jour où je me suis
décidé à comprendre ANT.

J'ai aussi que tu cherches un convertisseur C vers Java.
J'en ai vu un par hasard à :

http://www.01net.com/telecharger/windows/Programmation/java/fiches/22048.html




Merci pour ce lien. Malheureusement, c'est un programme pour Windows et
je suis sous Linux. Je me suis finalement lancé dans le conversion de
mon programme à la main. Le C n'est pas si compliqué que cela quand
c'est bien écrit :)

Amicalement,

F.
Si ANT a changé ta vie, alors je te conseille de regarder du côté de

maven celà devrait te la révolutionner ;-))


Avatar
flipouk
cilovie wrote:
Si ANT a changé ta vie, alors je te conseille de regarder du côté de
maven celà devrait te la révolutionner ;-))
Je viens de jeter un coup d'oeil. Cela m'a l'air d'être un peu comme

ant, non ? D'après ce que je comprends, maven utilise ant pour créer un
projet, alors que si on utilise ant tout seul, il faut créer le projet
(répertoires etc.) soi-même.