Um caminho de classe é uma lista de locais de onde carregar classes.
Esses 'locais' podem ser diretórios ou arquivos jar.
Para diretórios, a JVM seguirá um padrão esperado para carregar uma classe. Se eu tenho o diretório C: / myproject / classes em meu classpath e tento carregar uma classe com.mycompany.Foo , ele irá procurar no diretório classes por um diretório chamado com , então sob esse diretório chamado mycompany , e finalmente, ele irá procurar um arquivo chamado Foo.class nesse diretório.
Na segunda instância, para arquivos jar, ele pesquisará o arquivo jar dessa classe. Um arquivo jar é na realidade apenas uma coleção compactada de diretórios como o acima. Se você descompactar um arquivo jar, obterá vários diretórios e arquivos de classe seguindo o padrão acima.
Portanto, a JVM percorre um caminho de classe do início ao fim, procurando a definição da classe quando tenta carregar a definição da classe. Por exemplo, no classpath:
C: / myproject / classes; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
A JVM tentará procurar primeiro nas classes de diretório , depois em stuff.jar e finalmente em otherstuff.jar .
Quando você obtém uma ClassNotFoundException, significa que a JVM percorreu todo o caminho de classe e não encontrou a classe que você tentou fazer referência. A solução, como tantas vezes no mundo Java, é verificar seu classpath.
Você define um classpath na linha de comando dizendo java -cp e, em seguida, seu classpath. Em um IDE como o Eclipse, você terá uma opção de menu para especificar seu classpath.