Un classpath è un elenco di posizioni da cui caricare le classi.
Queste "posizioni" possono essere directory o file jar.
Per le directory, la JVM seguirà un modello previsto per il caricamento di una classe. Se ho la directory C: / myproject / classes nel mio classpath e cerco di caricare una classe com.mycompany.Foo , cercherà sotto la directory classes una directory chiamata com , quindi sotto quella directory chiamata mycompany , e alla fine cercherà un file chiamato Foo.class in quella directory.
Nella seconda istanza, per i file jar, cercherà nel file jar quella classe. Un file jar è in realtà solo una raccolta compressa di directory come quella sopra. Se decomprimi un file jar, otterrai un mucchio di directory e file di classe seguendo lo schema sopra.
Quindi la JVM attraversa un percorso di classe dall'inizio alla fine alla ricerca della definizione della classe quando tenta di caricare la definizione della classe. Ad esempio, nel classpath:
C: / myproject / classi; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
La JVM tenterà di cercare prima nelle classi di directory , poi in stuff.jar e infine in otherstuff.jar .
Quando si ottiene un'eccezione ClassNotFoundException, significa che la JVM ha attraversato l'intero percorso di classe e non ha trovato la classe a cui si è tentato di fare riferimento. La soluzione, come spesso accade nel mondo Java, è controllare il proprio classpath.
Definisci un classpath sulla riga di comando dicendo java -cp e poi il tuo classpath. In un IDE come Eclipse, avrai un'opzione di menu per specificare il tuo classpath.