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"
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) :
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
Avoir un répertoire dans l'IFS (Integrated File System). Exemple :
CRTDIR DIR('/corp') [Entrée]
CRTDIR DIR('/corp/java') [Entrée]
Eventuellement, créer une bibliothèque et/ou un fichier source, par exemple :
CRTLIB LIB(mabiblio) [Entrée]
CRTSRCPF FILE(mabiblio/qjavsrc) [Entrée]
Par PDM, créer un membre de type TXT, contenant le code JAVA. Dans l'exemple ci-dessous, "MACLASSE",
membre saisi dans CORP/QJAVSRC :
>
************** Début des données ************************
0 classe Maclasse {
0 public static void main(String[] arguments) {
0 // programme Java minimal, pour démonstration
0 String salut = "Salut la compagnie !"
0 System.out.println(salut);
0 }
0 }
'
Copier le membre dans l'IFS, sous forme de "STREAM FILE" :
CPYTOSTMF [Entrée]
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.