【问题标题】:CYGWIN: all paths are in cygwin/ format and not understandable by javaCYGWIN:所有路径都是 cygwin/ 格式,java 无法理解
【发布时间】:2016-08-26 21:07:36
【问题描述】:

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

当我跑步时 java -cp {pathToMyJar} 主类 在 Windows 控制台中,它按预期工作。

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

当我运行打算在 cygwin 中运行的内容时 java -cp {/cygdrive/pathToMyJar} mainClass - 失败,找不到类。

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

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

好的,但有一个问题是:

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

【问题讨论】:

    标签: java cygwin classpath


    【解决方案1】:

    据我了解,为了让 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2016-07-30
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多