Un classpath est une liste d'emplacements à partir desquels charger les classes.
Ces "emplacements" peuvent être soit des répertoires, soit 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 classpath, et je tente de charger une classe com.mycompany.Foo il cherchera sous le répertoire des classes un répertoire appelé com puis sous ce dernier, un répertoire appelé monentreprise et enfin, il cherchera un fichier appelé Foo.class dans ce répertoire.
Dans le second cas, pour les fichiers jar, il cherchera le fichier jar pour cette classe. Un fichier jar n'est en réalité qu'une collection zippée de répertoires comme ci-dessus. Si vous décompressez un fichier jar, vous obtiendrez un ensemble de répertoires et de fichiers de classe suivant le modèle ci-dessus.
La JVM parcourt donc un classpath du début à la fin à la recherche de la définition de la classe lorsqu'elle tente de charger la définition de la classe. Par exemple, dans le classpath :
C:/myproject/classes;C:/myproject/lib/stuff.jar;C:/myproject/lib/otherstuff.jar
La JVM va essayer de chercher dans le répertoire clases d'abord, puis dans stuff.jar et enfin dans autrechose.jar .
Lorsque vous obtenez une ClassNotFoundException, cela signifie que la JVM a parcouru l'ensemble du classpath 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 classpath.
Vous définissez un classpath sur la ligne de commande en disant java -cp et ensuite votre classpath. Dans un IDE tel qu'Eclipse, vous aurez une option de menu pour spécifier votre classpath.