CYGWIN:所有路径都是cygwin /格式,java不能理解

时间:2016-03-07 10:02:00

标签: java cygwin classpath

我已经设置了cygwin并希望用它来运行java应用程序。

我跑的时候 java -cp {pathToMyJar} mainClass 在Windows控制台中,它按预期工作。

当我在cygwin中运行相同的命令时 - 它也可以。

当我运行在cygwin中运行的内容时 java -cp {/ cygdrive / pathToMyJar} mainClass   - 它失败了,找不到一个班级。

为什么我想以cygwin方式运行它?因为许多应用程序都有sh脚本来计算classpathes。如果您通过cygwin运行这些脚本,则会导致classpathes具有/ cygdrive /前缀。然后你启动java app并且它失败了因为java不理解cygwin的类路径前缀。

我已经读过,我可以强制cygwin删除该前缀:https://unix.stackexchange.com/questions/44677/how-do-i-get-rid-of-cygwins-cygdrive-prefix-in-all-paths

好的,但问题是:

如果cygwin的默认路径对于应用程序是不可理解的 - 它打算如何工作?使用cygwin的正确方法是什么?我很确定应该有一些" cygwin-friendly"这个问题的解决方案。

1 个答案:

答案 0 :(得分: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路径转换。例如, bash 中的Java编译可能如下所示:

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

由于使用引号和子shell有些尴尬,因此通常最好在shell脚本中使用 cygpath