2016-03-07 98 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脚本。