Le web de Dominique Guebey – Bazar informatique

Page : http://www.dg77.net/tekno/java/index.htm


  D o m i n i q u e   G u e b e y    J u n g l e    Bazar informatique

Intro JAVA

Ce qu'il faut savoir avant d'aborder la programmation Java proprement dite.

SUN, JRE & SDK, Path & Classpath

Java est un langage développé et fourni par Sun. Sans être sous licence libre stricto sensu, les logiciels de la technologie Java sont gratuitement disponibles et utilisables, voir le Contrat de licence de Code Binaire [http://www.java.com/fr/download/license.jsp] . Voir aussi liste de liens intéressants [http://www.dg77.net/tekno/links.htm#java]

Pour exécuter des programmes Java (fichiers dont le nom se termine par ".class" ou sont dans des ".jar" ou ".zip"), il faut le JRE (Java Run-time Environment), ou "machine virtuelle Java". On appelle classe un programme Java exécutable. Le lancement d'une classe se fera par la commande java suivie du nom du programme (sans son extension .class) et des éventuels paramètres. Exemple pour un programme nommé JDBCAffSpe.class : java  JDBCAffSpe  parametre_1  parametre_2. Pour exécuter le contenu d'un fichier jar, ajouter l'option "-jar". Exemple : java  -jar   nom_du_fichier.jar  parametre_1… Voir aussi plus bas sur les archives Java

Créer des "classes" : un programme Java est d'abord écrit sous forme de fichier source, dont le nom comporte généralement l'extension ".java". Un simple éditeur de texte suffit. Dans un second temps, on crée la classe (programme Java exécutable). C'est l'opération de compilation pour laquelle on doit disposer d'un SDK (Software Development Kit) ou JDK. Le SDK comprend aussi le JRE. La compilation se fait avec la commande javac, à partir d'un fichier source dont le nom se termine par ".java". Exemple : javac  nom_du_programme.java. Après la compilation, un fichier nom_du_programme.class est créé.

Un programme Java créé sur une plate-forme donnée peut étre exécuté sur tout autre système, du moment que ce dernier dispose d'un JRE ; par exemple, on peut copier puis lancer sur un IBM AS400/iSeries un programme compilé sur un PC sous Windows.

Cas concrêt d'installation

Installation sous Linux du J2EE 1.2 SDK

A partir du fichier j2eesdk-1_4-linux.bin …a d'abord fallu installer un package manquant (glibc6 etc.) car : "error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory"

Variables d'environnement

Généralités

JRE et Variables d'Environnement : pour que fonctionne automatiquement la commande d'exécution d'un programme Java ("java…") il faut que le JRE (plus précisément son sous-répertoire "bin") soit inclu dans la liste des chemins d'accès (le "PATH") du système. Exemple, pour un PC sous Microsoft Windows 2000, pour lequel le JRE se trouve installé dans c:\Program Files\java\jre-1.4.2 il faudra ajouter à la variable d'environnement PATH : c:\Program Files\java\jre-1.4.2\bin

SDK et Variable d'Environnement CLASSPATH : pour que fonctionne automatiquement (entre autres) la commande de compilation ("javac…"), il est préférable que soit créée une variable d'environnement nommée CLASSPATH pointant nommément le fichier tools.jar dans le sous-répertoire lib. Exemple (pour un PC sous Microsoft Windows), si le SDK a été mis dans c:\j2sdk-1.4.2, la variable d'environnement CLASSPATH devra avoir pour valeur c:\j2sdk-1.4.2\lib\tools.jar. On peut aussi utiliser l'option -classpath dans toute commande java, par exemple : javac  -classpath  c:\j2sdk-1.4.2\lib\tools.jar  nom_programme…. Voir aussi plus bas la section "Complément sur javac, Classpath, Packages, jar…"

JAVA_HOME : cette valeur très pratique indique où se trouve la racine du JDK Java.

Sous Windows 95-98

D'abord ouvrir une fenêtre DOS : Démarrer > Exécuter > Command [Entrée]

Pour ajouter le JRE au Path, éditer le fichier autoexec.bat et lui ajouter à la fin la ligne : PATH [chemin_du_dossier_bin];%PATH% Exemple : PATH c:\progra~1\java\jre-1.4.2\bin;%PATH%

Pour enregistrer le CLASSPATH, éditer le fichier autoexec.bat et lui ajouter à la fin la ligne : SET CLASSPATH=%CLASSPATH%;.;[chemin_et_nom_de_tools.jar] Exemple : SET CLASSPATH=%CLASSPATH%;.;c:\j2sdk-~1\lib\tools.jar

JAVA_HOME : Suivre la même méthode que pour CLASSPATH.

Sous Windows NT/2000

Démarrer > Paramètres > Panneau de configuration > Système > Avancé > Variables d'environnement > Variables Système.

Choisir la variable PATH, JAVA_HOME ou CLASSPATH (si elle existe, sinon : > Nouveau…) ; puis ajouter les informations voulues (cf exemples ci-dessus).

Sous UNIX/LINUX

Depend du Shell utilisé. Sous csh : setenv, sous sh ou bash : set…

Exemple supposant l'installation d'un jdk dans /opt/j2sdk (ces lignes peuvent être mises par exemple dans le .bashrc de l'utilisateur) :

JAVA_HOME=/opt/j2sdk
PATH=${JAVA_HOME}/bin:${PATH}
export JAVA_HOME PATH

CLASSPATH=$CLASSPATH:/opt/j2sdk/lib/tools.jar
export CLASSPATH

Variante pour l'installation décrite plus haut :

PATH=/opt/package/jre/bin:$PATH
export PATH
CLASSPATH=/opt/SUNWappserver/jdk/lib/tools.jar
export CLASSPATH
JAVA_HOME=/opt/SUNWappserver/jdk
export JAVA_HOME

Sous Mac OS

Depend du Shell utilisé. tcsh : utiliser setenv, sinon : VARIABLE=[Chemin] puis export… devrait marcher.

Le classpath sur OS400, IBM AS400/iSeries

Utiliser les commandes CL : WRKENVVAR, ADDENVVAR, CHGENVVAR, RMVENVVAR, pour gérer, ajouter, modifier et supprimer une valeur d'environnement.

Tests et vérifications

Sous Windows, la commande set sans option permet d'afficher l'ensemble des valeurs d'environnement, set CLASSPATH donne le CLASSPATH etc. Sous Linux, entrer echo $PATH, echo $CLASSPATH etc.

Configuration du JRE : entrer la commande java  -version, on doit obtenir des informations sur la version Java en cours.

Configuration du SDK : si le Classpath est convenablement configuré, l'envoi d'une commande comme javac  toto.java peut entraîner l'affichage d'une erreur (il est possible que le programme toto n'existe pas, ou qu'il ne soit pas cherché là où il se trouve, ou qu'il comporte des erreurs…) mais la réponse ne doit pas être que "javac" est une commande inconnue.

Complément sur javac, Classpath, Packages, jar…

javac

Il est conseillé de mettre les fichiers sources (".java") à un autre emplacement que les exécutables. Dans ce cas, on compilera avec l'option -d pour indiquer l'endroit où est créée la classe. Exemple : javac  -d  ../projet/classes  nom_du_programme.java

Pour compiler les membres d'un package (inclus dans un .jar) la syntaxe est : javac -classpath [chemin]/mes_classes.jar … Voir aussi plus bas la section sur les packages.

Encore Classpath

Le CLASSPATH indique où JAVA peut trouver le programme qui est lancé et éventuellement les modules externes auxquels il fait appel. Il peut être modifié par l'option -classpath au moment de l'exécution de la commande "java". Attention, l'option -classpath REMPLACE la valeur d'environnement du même nom, elle ne s'y ajoute pas. Pour inclure cette dernière dans le chemin de recherche, il suffit de l'indiquer dans l'option. Voici 4 exemples pour deux types de systèmes qui aboutissent au même résultat.

Dans cet exemple, xalan.jar est supposé être dans le répertoire en cours.

Archives jar

L'exemple précédent montre comment on peut lancer un programme (Process dans le répertoire xslt du package xalan). L'extension jar est l'abréviation de "java archive". Un "jar" est le moyen de regrouper des programmes Java en un bloc à l'intérieur duquel se trouve généralement une arborescence de répertoires. Sur les packages, voir la section plus bas.

Création de fichiers jar : utiliser la commande jar. Exemple : jar  uf  nom_archive.jar  liste_fichiers_a_inclure Le “u” signifie “mise-à-jour” (mettre "c" pour création), le "f" est pour diriger le "flux" des données (sic). Résumé des options :

c
Création, avec ou sans contenu
t
Liste le contenu
x [fichiers]
Extraction, [fichiers] est optionnel
f
Le second argument donnera le nom du jar
v
Mode bavard
m
Inclusion d'un manifeste
o
Enregistre sans comprimer
M
Ne crée pas de manifeste (cf infra)
u
Mise-à-jour
i
Crée un fichier INDEX.LIST dans le jar
C
Change temporairement le répertoire en cours
J(option)
Désigne une des options du lancement d'application Java

Un "jar" peut contenir autre-chose que des classes, on peut y inclure aussi notamment les manuels utilisateurs, la documentation technique des programmes et de l'application, etc. La commande Javadoc permet de générer automatiquement la documentation des classes sous forme de fichiers html. Cette documentation est établie à partir d'un type particulier de commentaires (textes précédés de /** ) inclus dans les fichiers sources.

Démarrage automatique de l'application contenue dans une archive jar : inclure dans le package un fichier "manifest" qui sert entre autres à indiquer la classe lancée initialement. A la commande jar on ajoutera alors l'option "m" et on spécifira ensuite le nom du fichier à utiliser. Ce dernier doit avoir l'extension mf. Exemple de fichier manifeste minimal :

Manifest-Version: 1.0M
Main-Class: MenuGeneral

En sortie de l'éditeur de texte, nommer le fichier Projet.mf, puis créer l'archive : jar  cmf Projet.mf  Projet.jar  *.java. Quand on fera java  -jar  Projet.jar, c'est "MenuGeneral" qui démarrera.

Packages

Revenons à l'exemple précédent qui utilise la classe org.apache.xalan.xslt.Process On remarque que le nom des classes du package xalan est précédées par org.apache. Un package est nommé suivant une convention qui consiste à en ajouter la désignation à son nom de domaine à l'envers (xalan est fourni sur http://www.apache.org). Ainsi on est assuré que le nom sera unique.

Une règle élémentaire de Java est que "package=répertoire". Exemple pour net.mondomaine.projet : suivant cette règle, les classes seront mises sous le répertoire net/mondomaine/projet/. Pour être assuré que la compilation fonctionnera : d'abord se placer à la racine de l'arborescence (i.e. au dessus de "net" cd [racine]) puis compiler ainsi : javac  -classpath  "."  net/mondomaine/projet/nom_programme.java. Il est fréquent qu'un programme java fasse référence à d'autres classe ; avec cette méthode javac trouvera automatiquement ces dernières.

Cas où on sépare les sources des exécutables : tout d'abord, les ".java" doivent être dans une arborescence conforme. Puis on décide d'un emplacement pour les classes. Exemple : créer un répertoire classes sous la racine, puis : javac  -d  classes  -classpath  classes  net/mondomaine/projet/programme.java. On retrouvera la classe compilée ("programme.class") dans l'arborescence automatiquement générée par javac sous le répertoire classes.

Le programme donné en exemple ci-dessus ne fait appel qu'à un minimum de l'implémentation standard de Java : rien ne s'oppose à sa compilation et même son exécution en test sur le PC. Il en va tout autrement si le programme est plus complexe et "importe" (appelle) des packages (on dit aussi "bibliothèques") pour en utiliser les fonctions. Ces derniers packages importés devront figurer dans le CLASSPATH lors de l'exécution de JAVAC. Par exemple pour créer des programmes destinés à l'AS400, il conviendra d'avoir en ligne au moins jt400.jar.

Identification de/inclusion dans des packages : un coup d'œil au début du programme source java suffit pour les vérifier.

Importation d'un package  : import MonPackage.MaClasse;
ou encore : import MonPackage.*;
But : eviter d'avoir à specifier à chaque appel de MaClasse : MonPackage.MaClasse… (encore faut-il que la classe soit declaree publique)
Indiquer de quel package le fichier fait partie : package MonPackage;
Tout fichier java fait partie d'un package, i.e. il y a un package par defaut, si pas specifié : java prend toutes les classes du repertoire en cours.

Création d'un premier programme Java sur IBM AS400/ iSeries

Création intégrale sur l'AS400

Une partie du travail sur "PC"

Une possibilité est de créer le source (Maclasse.java) sur un poste de travail, pour le transférer ensuite dans l'IFS par FTP ou en "mappant" un Lecteur Réseau (créé par Operation Navigator). Attention : en cas d'utilisation de FTP, penser à spécifier ASCII.

Génération de la classe : le fichier peut être compilé sur le PC (création de Maclasse.class). La classe est ensuite transmise à l'as400 par le même moyen.