2009-06-23 50 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中使用),并打算在不久的将来提供它。