CYGWIN:所有路径均为 cygwin/ 格式,java 无法理解

CYGWIN: all paths are in cygwin/ format and not understandable by java

我已经安装了 cygwin 并想将它用于 运行 java 应用程序。

当我运行 java -cp {pathToMyJar} mainClass 在 windows 控制台中,它按预期工作。

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

当我 运行 在 cygwin 中 运行 的目的是什么 java -cp {/cygdrive/pathToMyJar} mainClass - 它失败了,找不到 class.

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

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

好的,但问题是:

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

据我了解,为了 Java 理解 Cygwin 路径,必须在 Cygwin 环境中进行编译。

如果您使用 sh 脚本输出供 Windows Java 使用的路径,您可以使用 cygpath 实用程序将Windows 形式的路径,例如

$ cygpath -w ~
C:\cygwin64\home\anthony

事实上,Cygwin 文档将 java 列为 cygpath 实用程序的一个很好的用例。来自 Using Cygwin effectively with Windows:

A few programs require a Windows-style, semicolon-delimited path list, which cygpath can translate from a POSIX path with the -p option. For example, a Java compilation from bash might look like this:

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

Since using quoting and subshells is somewhat awkward, it is often preferable to use cygpath in shell scripts.