Ich habe ein einfaches Java-Programm, das meinen Klassenpfad ausgibt. Ordnerstruktur ist wie folgt:.Java-Programm auf Cygwin ausführen - Klassenpfad nicht gefunden
[~/tmp/bin]# ls
launcher/ PrintClasspath.class*
und eine Kopie der gleichen Klasse eine weitere Ebene nach unten in
[~/tmp/bin/launcher]# ls
PrintClasspath.class*
Wenn ich aufspringen zu meinem ~/tmp
Verzeichnis und führe PrintClasspath
in meinem ~/tmp/bin
Verzeichnis, I kann das Programm problemlos ausführen und ./bin
als den Klassenpfad angeben.
[~/tmp]# java -cp "./bin" PrintClasspath
/C:/Cygwin/home/user/tmp/bin/
Oder ich kann die gleiche Datei, die ich im ~/tmp/bin/launcher
Verzeichnis verschachtelt ausgeführt werden, wenn ich den Classpath bearbeiten wie folgt:
[~/tmp]# java -cp "./bin/launcher" PrintClasspath
/C:/Cygwin/home/user/tmp/bin/launcher/
Aber wenn ich versuche, in meinem ~/tmp
Verzeichnis zu sitzen, und versuchen zu laufen meine Klasse im ~/tmp/bin/launcher
Verzeichnis mit ./bin
als meine classpath und qualifizieren, wo die Klasse über den folgenden befindet:
[~/tmp]# java -cp "./bin" launcher.PrintClasspath
Error: Could not find or load main class launcher.PrintClasspath
Es versagt. Ich habe den gleichen Test auf meiner Linux-Box ausgeführt, und die Qualifizierung, wo die Klasse in einem Unterverzeichnis gespeichert ist, nachdem ein Klassenpfad mehrere Verzeichnisse geöffnet hat, funktioniert einwandfrei.
Ich nahm ursprünglich an, dass dies eine Windows/Cygwin-Nuance war, aber ich habe die gleiche Übung in der Windows-Eingabeaufforderung und das gleiche Ergebnis versucht. Was fehlt mir hier.do muss ich nur meine Windows-Java-Programme mit einem voll qualifizierten Klassenpfad ausführen?