Monthly Archives: juillet 2013

Le classpath

Le contenu de cet article est principalement issu de la présentation Le classpath n’est pas mort, mais presque de Alexis Hassler à Devoxx France 2013.

Pour commencer, il existe deux types de classes :

  • classes du JRE (String, Integer par exemple)
  • classes provenant de librairies externes ou du code de l’application

Une classe est identifiée par son nom et par son classloader. Pour toutes les classes n’étant pas dans le JRE, il faut indiquer au lancement de l’application le classpath à utiliser. Si le classpath est erroné deux exceptions peuvent être levées : NoClassDefFoundError et ClassNotFoundException.

Qu’est ce qu’un classloader

Un classloader est avant tout une classe qui est capable de charger une autre classe ou des ressources (properties, xml, images …)

Lorsque le runtime java a besoin de charger une nouvelle classe pour une application, il la recherche dans l’ordre suivant :

  1. Bootstrap classes via le bootstrap classloader : le cœur de la JRE (rt.jar), l’internationalisation (i18n.jar) et bien d’autres
  2. Installed extensions via l’extension classloader : classes présentes dans le dossier lib/ext de la JRE. A ne pas confondre avec le mécanisme d’endorced.
  3. System classes via le system classloader : classes de l’application ainsi que de ses librairies

Tous les classloader (sauf le bootstrap) possède un parent.
Pour connaitre le classloader d’une classe :

MaClasse.class.getClassLoader() // sun.misc.Launcher$AppClassLoader
String.class.getClassLoader() // null

Le classloader des classes du JRE (bootstrap classloader) n’est pas un composant java. Si le bootstrap classloader était un objet Java, il lui faudrait un classloader à qui il faudrait également un classloader …
Le bootstrap classloader est donc un bout de code natif. Lire la suite »

Vue de la Dordogne depuis Castelnaud

Vue depuis le château de Castelnaud en Dordogne.

Vue Chateau Castelnaud

Licence Creative Commons  NC-BY-NC