2009-06-23 29 views

回答

2

如果有一個使用cygwin文件系統和X-windows進行顯示的本機cygwin實現將會很好,很遺憾,我不知道這樣的發佈。我會假設它也是一個相當努力的端口OpenJDK,但我還沒有嘗試過。

0

儘管對於cygwin的沒有Java SDK,就可以得到Windows的JDK工作,如果你願意,以適應各種問題的解決方法:

  • 通過Java程序
  • 預期一些cygwin的路徑不處理
  • 的文件路徑分隔符是反斜槓而不是削減
  • 的PATH項分隔是以分號,而不是冒號

以我的經驗,第一顆子彈是由最大的問題,儘管三者有些相關。分離者傾向於把自己看作是解決第一個問題的副作用。

所有這三個問題都可以通過設置一個開發環境來解決,所有感興趣的文件路徑(如java.io.File和java.nio.Path等)都可以在不指定驅動器號的情況下表示。

事實證明,很少有必要在Windows下的文件路徑字符串中使用反斜槓。我遇到的這條規則的唯一例外是在爲需要反斜槓的程序(例如,CMD.EXE)產生命令行時,將文件路徑字符串作爲參數傳遞。 java.io和java.nio包都接受正斜槓,所以,對於這一點,請執行Microsoft開發庫。大多數拒絕正斜線路徑的程序都是(恕我直言),可能會無償地這樣做。

所以,真正的問題是「/ cygdrive/c」不能被java.io.File識別爲引用「C:\」。

換句話說,以下文件的測試將返回false:

new java.io.File("/cygdrive/c").exists() 

,而這按預期工作:

new java.io.File("c:/").exists() 

的Windows的最新版本現在支持一般的符號鏈接,提供一種方式來設置不使用驅動器號的cygwin開發環境。通過整個文件系統的統一視圖(所有文件出現在「/」下方,默認驅動器盤符不變,例如C :),驅動器盤符可以從文件路徑字符串中丟棄。換句話說,您希望能夠將「c:/」引用爲「/」。這可以通過多種方式來實現,一個是符號鏈接C以下的其他驅動器:/,例如:

$ ln -sFT d:/ c:/d 

如果環境變量CYGWIN包含「winsymlinks:原生」,這將創建一個Windows符號鏈接,結果即(假設C:是默認的驅動器),你的java程序將正確地識別字符串「/ d」是指「d:\」,所以你可以這樣做:如果您無法或不願

new java.io.File("/d").isDirectory // returns true, as expected 

爲了修改你的cygwin環境,還有另外一種方法,它比較通用。你可以擴展java.io.文件並覆蓋構造函數和各種方法(實際上)將cygwin路徑轉換爲其等價的窗口(如cygpath -m或-w),並將windows路徑字符串轉換爲更類似POSIX的格式。我有一個這樣的庫(用scala編寫,但可以從java中使用),並打算在不久的將來提供它。