Quote Originariamente inviata da ShuBaarb Visualizza il messaggio
Mi trovo in una cartella con il mio file Test.java che contiene l'omonima classe con metodo main.
La compilo in 2 modi con eguale efficacia con "javac Test.java", o con "javac test/Test.java" sopo essere risalito nella cartella superiore.
In entrambi i casi ottengo il mio file Test.class nella cartella "test".
Dall'interno di "test" digito "java Test" e il programma parte.
Dalla cartella superiore digito "java test.Test" e va in errore "NoClassDefFoundError".
Ma non dovrebbe funzionare lo stesso specificando il package di appartenenza allo stesso modo con cui lo posso compilare dalla cartella superiore a test?
La classe è in un package? Intendo innanzitutto: all'inizio del sorgente c'è un

package qualcosa;

?

Se non c'è, la classe è nel package di "default" (unnamed, senza nome). Se c'è, la classe ha il nome completamente qualificato qualcosa.Test.

La regola fondamentale: i nomi dei package devono "riflettersi" nei nomi delle cartelle. Quindi se la classe fosse com.esempio.Test, allora Test.class deve essere sotto una cartella com/esempio. E la directory che contiene la "com" deve essere in classpath.