2016-03-07 72 views
0

我已經安裝了cygwin並希望使用它來運行java應用程序。CYGWIN:所有路徑都是cygwin /格式,java不可以理解

當我運行 java命令{} pathToMyJar mainClass 在Windows控制檯它按預期工作。

當我在cygwin中運行相同的命令時 - 它也可以工作。

當我運行什麼打算在Cygwin的 java命令運行{/ cygdrive/pathToMyJar} mainClass - 它失敗了,它不能找到一個類。

爲什麼我想用cygwin的方式運行它?因爲許多應用程序都有sh腳本來計算classpathes。如果你通過cygwin運行這些腳本,會導致classpathes具有該/ cygdrive /前綴。然後你啓動java應用程序,它會失敗,因爲java不理解cygwin的類路徑前綴。

我已閱讀,我可以強制Cygwin來去除前綴:https://unix.stackexchange.com/questions/44677/how-do-i-get-rid-of-cygwins-cygdrive-prefix-in-all-paths

OK,但問題是:

如果Cygwin的默認路徑是不理解的應用程序 - 它打算如何工作的?使用cygwin的正確方法是什麼?我很確定這個問題應該有一些「cygwin-friendly」解決方案。

回答

2

據我所知,爲了讓Java理解Cygwin路徑,它必須在Cygwin環境中編譯。

如果您使用sh腳本由一個Windows的Java用於消費的輸出路徑,可以使用cygpath實用程序將路徑轉換爲Windows形式,例如,

$ cygpath -w ~ 
C:\cygwin64\home\anthony 

實際上,Cygwin文檔列出java作爲cygpath實用程序的良好用例。從Using Cygwin effectively with Windows

一些程序需要一個Windows風格,分號分隔的路徑列表,其中cygpath可以使用-p選項POSIX路徑轉換。例如,從慶典 Java編譯可能是這樣的:

javac -cp "$(cygpath -pw "$CLASSPATH")" hello.java 

由於採用報價和次外層是有點尷尬的,它往往是最好使用cygpath在shell腳本。