在Cygwin下访问Windows目录,或者执行本身安装于Windows的命令(比如java),都会碰到UNIX目录格式与Windows目录格式不兼容的问题。
可以通过如下几个方法解决。
Java执行目录的问题
Windows下JAVA_HOME的位置通常位于C:\Program Files\Java\jdk_version下,
Program Files中间有个空格,造成了java无法执行。
有两种解决方法:
- 在空格前面加\
- 通过LN来建立链接,然后在重新指定JAVA_HOME为链接后的目录
参见http://pwcrab.blog.163.com/blog/static/169903822201072810482755/
目录格式转换的问题
在执行java命令需要指定访问目录的时候,如果直接用UNIX风格来指定的话,会出错。比如:
java -jar /MyProject/lib/foo.jar
Error: Unable to access jarfile /MyProject/lib/foo.jar
Cygwin提供了一个命令,cygpath来处理UNIX和Windows不同目录格式的转换。
-w为生成Windows风格的目录格式,-u可以生成UNIX风格的目录格式。
这样在需要指定目录的地方用cygpath语句来替换,比如:
java -jar "$(cygpath -w /MyProject/lib/foo.jar)"
ANT编译的问题
如果采用ANT编译的话,如果执行的是本身安装于Windows下的ANT,同样需要指定Windows风格的目录。
另外,生成jar文件的时候,在MF文件中指定Class-Path时,绝对目录的话同样需要用Windows风格。比如:
Class-Path: file:/C:/cygwin/MyProject/lib/foo1.jar
file:/C:/cygwin/MyProject/lib/foo2.jar