Java

Cette page revient sur les basiques dans l'utilisation de java pour l'installation, la compilation et l'exécution de code.
Cliquez sur les panels suivants pour obtenir de l'aide concernant l'un de ces sujets.

Nous allons tout d'abords installer un JDK java 1.8 si ce n'est pas déjà fait.
Vérifions si java est déjà installé.

$ java -version
  java version "1.7.0_25"
  Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
  Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
  

Ceci indiquerait que la version 1.7 est installé, mais nous aimerions une version 1.8. Rendez-vous sur Java SE Development Kit 8 Downloads chez Oracle. Téléchargez et installez l'archive.

Il faudra déterminer quel est l'architecture de notre poste de travail. Windows, Linux, Mac OS ? Système 32 bits ou 64 bits ?

$ uname -a
  Darwin webpulser-mbp.local 11.4.2 Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 
  PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
  

Dans mon cas un mac équipé d'un processeur intel (x86) et 64 bits. La version 11.4.2 du noyau me permet de dire, après une petite recherche, qu'il s'agit de Mac OS X Lion. "A propos de ce mac" aurait aussi pu m'aider. Sous windows appuyer sur [Win]+[Pause] pour ouvrir les propriétés du poste de travail.

Il faudra idéalement ajouter le chemin des binaires java dans la variable d'environnement "PATH" du système. Modifiez le PATH.

Le PATH est une liste de dossiers parcourus par le système pour trouver les commandes exécutables appelées sans en préciser le chemin complet. lorsque vous taper "java" dans l'invite de commande, le système va rechercher dans chacun des dossiers, dans l'ordre ou ils sont définis, un fichier exécutable portant ce nom. Si un tel programme est trouvé il est lancé, sinon vous aurez une erreur du type "java: command not found."
Il est aussi possible d'appeler un programme en précisant son chemin complet. Si vous taper "/opt/jdk1.8.0_11/bin/java -version" c'est ce programme en particulier qui sera appelé (en supposant qu'il existe).

Le PATH est une chaine de caractère regroupant l'ensemble des dossier de recherche, séparés par un ':' sous linux/osx et par ';' sous windows.
Pour modifier ce PATH ;
Imaginons que j'utilise linux et que j'ai décompressé l'archive dans /opt, cela a du créer un répertoire jdk1.8.0_11.

$ echo 'export PATH="/opt/jdk1.8.0_11/bin:$PATH"' >> ~/.bashrc
  $ . ~/.bashrc
  
Le fichier .bashrc contenu dans votre répertoire utilisateur est exécuté à chaque fois qu'un shell de type bash est lancé.

Sous mac l'installation du package va se faire dans '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/'. Le fichier à modifier pour le PATH est '.bash_profile' dans le HOME.

$ echo 'export PATH="/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/bin:$PATH"' >> ~/.bash_profile
  $ . ~/.bash_profile
  

Pour compiler un fichier il faut utiliser la commande "javac" suivi du source à compiler. La compilation transforme votre code source texte en une suite d'instructions et de données interprétable par la machine virtuelle java. Ces fichiers compilés seront interprétables quelque soit le système d'exploitation utilisé: "Compile Once, Run Everywhere" (ou presque).

Sans options, cette commande créera des fichiers compilés à l'endroit où vous avez exécuté la commande. Voici une petite liste d'option à connaitre :
-d suivi d'un répertoire permet d'indiquer où les ".class" doivent être créés.
-sourcepath indique l'endroit où rechercher les fichiers sources de l'utilisateur. Lorsque votre compilateur rencontre dans le source une classe qu'il ne connait pas, il essaiera de la rechercher et de la compiler depuis cet endroit
-source permet de s'assurer de la compatibilité des sources java pour une version minimale d'un compilateur. Il peut être en effet pratique d'utiliser cet option si vous possédez une version 1.8 alors que vos collègues utilisent la version 1.7 (et doivent recompiler vos sources)
-target permet de compiler du bytecode qui peut être lu et interprété par une JVM de cette version. La plupart des nouveautés syntaxique peuvent être compilées vers des versions de JVM inférieures. Les nouvelles versions du compilateur introduisent par contre des optimisations et une forme encodée des classes qui peuvent être différentes.
-cp permet de définir le CLASSPATH, c'est à dire la liste des répertoires et des jar contenant les classes nécessaires à la compilation de vos sources.

Pour exécuter un programme il faut utiliser la commande "java" en passant en paramètre le nom complet de la classe dont vous voulez lancer la méthode "main".
Il ne faut pas passer en paramètre le nom du fichier java, ou le fichier ".class" compilé.
le nom complet d'une classe comprend le nom du "package" dans laquelle elle se trouve, avec le séparateur de package habituel "." entre les noms de classe.
Pour lancer un programme, placez vous à la "racine" de la hiérarchie des packages, c'est à dire le répertoire contenant le premier package.
Si votre programme nécessite des librairies pour s'exécuter, ou des classes situées à un autre endroit de votre disque, il faudra l'indiquer dans le classpath, à l'aide de l'option -cp ou de la variable d'environnement CLASSPATH.

Téléchargez ce fichier source, compilez le et essayez de l'exécuter. Le fichier source contient quelques nouveautés introduites dans Java 8 telles que les "lamda expressions", la nouvelle API Java Time pour manipuler les Dates, le "StringJoiner", les Streams. Cela ne compilera donc que si vous avez correctement installé le JDK8.

Pour notre exemple minimaliste, une fois le fichier java compilé, exécutez simplement "java TestJava".