Un classpath est une liste d'emplacements à partir desquels charger les classes.
Ces «emplacements» peuvent être des répertoires ou des fichiers jar.
Pour les répertoires, la JVM suivra un modèle attendu pour le chargement d'une classe. Si j'ai le répertoire C: / myproject / classes dans mon chemin de classe, et que j'essaye de charger une classe com.mycompany.Foo , il cherchera sous le répertoire des classes un répertoire appelé com , puis sous celui-ci un répertoire appelé mycompany , et enfin, il cherchera un fichier appelé Foo.class dans ce répertoire.
Dans le second cas, pour les fichiers jar, il recherchera le fichier jar pour cette classe. Un fichier jar n'est en réalité qu'une collection compressée de répertoires comme ci-dessus. Si vous décompressez un fichier jar, vous obtiendrez un tas de répertoires et de fichiers de classe suivant le modèle ci-dessus.
Ainsi, la machine virtuelle Java parcourt un chemin de classe du début à la fin à la recherche de la définition de la classe lorsqu'elle tente de charger la définition de classe. Par exemple, dans le classpath:
C: / monprojet / classes; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
La JVM essaiera d'abord de chercher dans les classes du répertoire , puis dans stuff.jar et enfin dans otherstuff.jar .
Lorsque vous obtenez une ClassNotFoundException, cela signifie que la machine virtuelle Java a parcouru tout le chemin de classe et n'a pas trouvé la classe que vous avez tenté de référencer. La solution, comme souvent dans le monde Java, est de vérifier votre chemin de classe.
Vous définissez un chemin de classe sur la ligne de commande en disant java -cp puis votre chemin de classe. Dans un IDE tel qu'Eclipse, vous aurez une option de menu pour spécifier votre chemin de classe.