Stories
Cyrille Ngassam Nkwenga 25 septembre 2023 21:05
Compilation de code Java
Compilation de code Java

La compilation du code est l'étape la plus importante dans le développement d'un logiciel. Dans cet article nous allons parler de la compilation du code écrit en Java.

La compilation d'un code écrit dans un langage de programmation est un processus à travers lequel un code source est converti en code machine(on parle aussi de langage machine). Un code machine est une suite de bits qui est interprétée et exécutée par un ordinateur(microprocesseur). Le code machine est unique à chaque microprocesseur. Le code machine est un ensemble d'instructions et de données que le microprocesseur traite.

Compilateur Java

Dans Java il y a une légère différence au niveau du code machine généré. Java requiert une machine virtuelle nommée JVM : Java Virtual Machine. Cette machine virtuelle n'est pas à confondre avec les machines virtuelles comme virtualbox ou alors celles qu'on retrouve dans des solutions de conteneurisations comme docker ou LXC etc. Le Compilateur Java génère ce qu'on appelle un bytecode(.class) et non pas un code machine. Le bytecode généré est à son tour envoyé à la JVM et la JVM génère un code machine. Pour écrire un code Java, on a besoin d'un JDK : Java Development Kit. Le JDK nous offre un compilateur javac et un exécuteur de code nommé java.

Le compilateur officiel de Java est appelé javac. Comme évoqué plus haut, le compilateur produit le bytecode.  Pour exécuter un bytecode, la JVM utilise la commande java.

La version du compilateur Java peut être obtenue grâce à la commande suivante :

$ javac -version javac 19.0.2

La version du JDK peut être obtenue grâce à la commande suivante :

$ java -version openjdk version "19.0.2" 2023-01-17 OpenJDK Runtime Environment (build 19.0.2+7-Ubuntu-0ubuntu322.04) OpenJDK 64-Bit Server VM (build 19.0.2+7-Ubuntu-0ubuntu322.04, mixed mode, sharing)

En obtenant la version du JDK on peut apercevoir ce resultat : OpenJDK Runtime Environment. Il s'agit du JRE : Java Runtime Environment. Il est nécessaire pour l’exécution d'un bytecode.

Utilisation du compilateur

Pour générer un bytecode on a besoin de compiler un code source Java. Pour cet article nous allons utiliser un code simple: Hello World:

package org.example.hello; public class App { public static void main(String[] args) throws Exception { System.out.println("Hello, World!"); } }

La structure du dossier du projet est repartie comme suit:

Dossier Root : helloworl

Source : helloworld/src

package: helloworld/src/org/example/hello

source main : helloworld/src/org/example/hello/App.java.

Les dossiers manquant sont à créer afin d'obtenir un chemin valide. Nous parlerons des packages dans un autre article.

Aujourd'hui les outils modernes gèrent la compilation pour nous, et ceci peut-être un problème pour les débutants car ils ne savent pas ce qu'il faut faire pour obtenir un code machine. Le but de cet article est de voir comment un code source java est compilé manuellement en bytecode. Pour compiler un code source, on doit indiquer au compilateur le chemin du fichier source à compiler. Afin de simplifier la longueur de ce chemin, on va se positionner dans le dossier qui contient le projet et on exécute la compilation en indiquant le chemin du fichier source(voir exemple). Dans le dossier root nous créons un dossier nommé build(le nom peut être n'importe quoi) dans lequel le compilateur va placer le bytecode généré . Pour cet exemple, le code source se trouve dans un dossier nommé helloworld:

$ cd helloworld $ mkdir build javac src/org/example/hello/App.java -d build

dans l'exemple, le paramètre -d a été utilisé pour indiquer le dossier dans lequel bytecode doit être généré.

Maintenant que le bytecode est généré nous pouvons utiliser la commande java pour exécuter le bytecode.

$ cd build $ java org.example.hello.App Hello, World!

Sur la commande, on peut observer la notation suivante : org.example.hello; elle représente le package dans lequel se trouve le bytecode généré. Les packages requierent un article à part entière et donc ne sera pas abordé ici.

Conclusion

Nous venons de voir ce que c'est qu'un compilateur et la particularité du compilateur Java. Nous avons également vu ce que c'est que le code machine et le bytecode. Nous avons vu ce que c'est que le JVM et le JRE. Nous avons aussi vu que le compilateur Java est nommé javac et que pour exécuter un bytecode la commande java est utilisée.

À bientôt pour un prochain article sur les bases de développement logiciel en Java.

01
  • Soyez le premier à commenter