Re: Compilation java

Top Page

Reply to this message
Author: Yves Martin
Date:  
To: guilde
Subject: Re: Compilation java
Selon Frédéric Mantegazza <frederic.mantegazza@???>:

> On dimanche 14 octobre 2007, Yves Martin wrote:
>
> > Dans ce genre de programmes, l'absence de documentation pour la
> > compilation est un gros problème. L'usage d'un système de compilation
> > complet qui récupère les dépendances en ligne (maven ou el4ant) aiderait
> > beaucoup le novice en Java
>
> Bon, en plus simple, en partant d'un .jar :
>
> $ java -jar net.aetherial.gis.garmin.jar
> Exception in thread "main" java.lang.NoClassDefFoundError:
> org/apache/batik/swing/svg/JSVGComponent
>         at net.aetherial.gis.garmin.Console.main(Unknown Source)

>
> J'ai essayé :
>
> $ java -classpath /usr/share/java/batik -jar net.aetherial.gis.garmin.jar
>
> et
>
> $ java -classpath /usr/share/java -jar net.aetherial.gis.garmin.jar
>
> sans résultat. Où donc est ce JSVGComponent ? Dans batik ? Ou encore une
> autre librairie ?


Bien - ton problème est bien l'absence de documentation...

Pour ton information l'option "-classpath" est ignorée lorsque l'on utilise
"-jar" (voir man java)

Si ton garmin.jar est bien fait, le fichier META-INF/MANIFEST.MF qui est dedans
(c'est un zip) présente une variable "Class-Path" qui liste les dépendances
attendues sous forme de fichiers ".jar"

Le problème de cette déclaration est la nécessité de déposer les .jar en
question (ou faire un lien symbolique) dans le même répertoire que le
"garmin.jar".


Sinon le "classpath" que tu proposes n'est pas correct. C'est une liste de jar
ou un répertoire qui contient des ".class" avec la structure de package
nécessaire.

exemple: "/usr/share/java/log4j-1.2.jar:/usr/share/java/commons-logging.jar"

Mais si tu dois vraiment définir le classpath au lancement, tu dois oublier
l'option "-jar":
java -classpath "..." net.aetherial.gis.garmin.jar net.aetherial.gis.Main-Class

Où il faut remplacer "net.aetherial.gis.Main-Class" par la valeur de la
propriété "Main-Class" du même MANIFEST.MF.

La documentation complète sur "Class-Path" et "Main-Class" du manifest sont
disponible dans les javadocs à partir de java.util.jar:
http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html


Une fois que l'on sait comment ça fonctionne - c'est beaucoup plus simple de
comprendre ce qui ne va pas. En Java comme ailleurs.

A+
--
Yves Martin