2016-07-20 36 views
1

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?

Antwort

1

Gelöst: Wenn Sie den Klassenpfad in Cygwin mit der Windows-Version von Java festlegen, müssen Sie das cygpath-Dienstprogramm mit den Optionen -wp verwenden, um die Unix-Stilpfade in Windows-Pfade zu konvertieren.

[~/tmp]# java -cp `cygpath -wp ./bin` launcher.PrintClasspath 
/C:/Cygwin/home/user/tmp/bin/ 

(via this)