3. Introduction au classpath, aux packages et path du système
Faites votre choix:
3.1 Le principe du classpath
-
Pour compiler ou exécuter un programme java qui importe de packages (externes au "core") ou qui utilise des classes additionnelles à vous, il faut indiquer où se trouvent ces classes, soit
-
un répertoire
-
un archive (de type *.jar ou *.zip)
-
Le mécanisme du classpath change selon la version du JDK et l'outil utilisé.
-
Quand java (javac, jre, etc.) se plaint, il faut vérifier le classpath et la documentation:
-
par ex:
http://tecfa2.unige.ch/guides/java/jdk1.2/docs/tooldocs/tools.html
3.2 Mécanisme classpath de base
-
Quand le compilateur ne trouve pas une classe, il faut rajouter l'endroit où elle se trouve (ou plutôt le package ou elle se trouve) dans le classpath
-
Vérifiez comment une application se comporte lorsque vous la lancez dans un autre répertoire et sur une autre machine et avec une autre version de Java.
A. Définir le classpath avec la variable d'environnement "
CLASSPATH
"
-
Normalement pas besoin d'inclure les classes du système (classes.zip).
-
Mais si elles se trouvent au mauvais endroit (ou si Windows n'arrive pas à le trouver), il FAUT les inclure (!)
-
Il faut inclure le répertoire où se trouve vos classes (votre programme) !!!
-
Si vous lancez java/javac dans le répertoire de travail: "."
-
Vous pouvez définir un classpath dans autoexec.bat, mais c'est déconseillé parce certains programmes sont configurés pour travailler avec une installation standarde (Java de Microsoft).
Exemple 3-1: Définitions de classpath
(Windows) :
set CLASSPATH=path1;path2 ...
set CLASSPATH=C:\java\MyClasses;C:\java\OtherClasses
set CLASSPATH=C:\java\MyClasses\mysql.jar;.
(Unix/csh):
setenv CLASSPATH path1:path2: .....
setenv CLASSPATH /local/java/classes/mm-jdbc/mysql.jar:/local/java/classes/xml-sun/xml.jar:/local/java/JSDK2.0/lib/jsdk.jar:.
(Unix/sh/bash/ksh):
set CLASSPATH=path1:path2: .....
export CLASSPATH=/local/java/applis/Xsl/xsl-standalone-0.7.1b1.jar
ou:
CLASSPATH=./lib/ldap.jar:./lib/jndi.jar:./lib/providerutil.jar:./lib/ldapbp.jar
export CLASSPATH;
B. Définir le classpath avec une option
Compilateur Sun (JDK)
javac -classpath path1;path2;... Fichier.java
javac -classpath c:\java\classes\javagently.jar;. Controller.java
Lanceur Java (JDK, application)
java -classpath path;path2;... Fichier
java -classpath c:\java\classes\javagently.jar;. Controller
Java runtime engine (JDK, application)
jre -cp ......
java -cp c:\java\classes\javagently.jar;. Controller
*Notez:
Le point (.) à la fin du chemin définit se refère au répertoire courant.
C. Applets
-
On définit un "applet" depuis une page HTML avec la balise <APPLET>. Dans cette balise, le paramètre "archive" dit où se trouvent les packages ou classes externes, le paramètre "code" dit où se trouve votre programme (par défaut c'est dans le même répertoire que le fichier *.html)
Le paramètre ARCHIVE
ARCHIVE="path1,path2" (VIRGULE pour séparer !)
Le paramètre CODE
CODE="path"
Exemple 3-2: Inclure des archives et des classes dans une applet
-
http://tecfa.unige.ch/guides/java/staf2x/ex/xml/sun-gui/
-
On inclut l'archive project.jar (qui est dans le même répertoire) et l'archive xml.jar qui se trouve dans le répertoire dessus)
-
Les classes project/GuiDemo.class sont dans l'archive project.jar
-
Le tag "applet" dans le fichier *.html
<APPLET
ALT="Disabled Java, did we? Don't do that!"
HEIGHT=460 WIDTH=620
ARCHIVE="project.jar,../xml.jar"
CODE="project/GuiDemo.class" >
D. Classpath, packages spéciaux et browsers WWW
-
Le browser WWW doit connaître les classes que vous importez
-
Par exemple le package "javagently" ne marchera pas avec un applet (même si votre classpath est bien défini car votre browser Web utilise son propre Java).
-
Il faut les déclarer dans l'applet (voir C. "Applets" [9])
-
Certains packages ne marchent pas avec des applets:
-
des plugins (comme CosmoPlayer) installent des classes sur votre disque dur (il faut s'assurer que ces classes sont toujours là)
-
Certains packages sont trops gros pour les distribution avec un applet
-
Par exemple Swing 1.1 avec la VM standard de Netscape 4.x (qui est un java 1.1.x)
-
Il faut donc les COPIER dans le répertoire "classes" de votre browser
3.3 Initialiser Java et Classpath avec un script
Exemple 3-3: Java Home et classpath sous MS-DOS (win et NT)
@echo off
set JAVA_HOME=C:\soft\jdk1.3
set path=%JAVA_HOME%\bin;%path%
echo java 2 avec xerces, xalan, eai et jdbc dans Q:\guides\java\classes\
set CLASSPATH=.;q:\guides\java\classes\xerces.jar;q:\guides\java\classes\xalan.jar;q:\guides\java\classes\mysql.jar;q:\guides\java\classes\vrml-cosmo-eai.jar
echo path : %path%
echo java est installé en %java_home%
echo CLASSPATH: %CLASSPATH%
cd q:\guides\java\st af2x\ex
-
http://tecfa.unige.ch/guides/java/staf2x/inits/initstaf.bat
-
Note: Ce script nécessite que vous montiez la partition tecfa:/web sur q:
-
Il est conseille de mettre ces scripts dans un endroit se trouvant dans le path, ainsi on peut taper cette comande partout
-
Sous Unix vous faites pareil (selon le shell que vous utilisez)
-- TIE