【问题标题】:Cygwin causes a Java "package does not exist" errorCygwin 导致 Java“包不存在”错误
【发布时间】:2019-02-25 19:16:24
【问题描述】:

我正在通过 makefile 编译一个 Java 项目,我和我的合作者有不同的机器(他有 Apple,我有 Windows)。我正在使用 Cygwin 在我的机器上运行 makefile,但 Java 不会编译 - 即使它在我的合作者的机器上编译。对他有用的命令格式为

javac -cp "./stem/java/lib/*:./stem/java/bin/Project.jar" -d ./stem/java/bin ./stem/java/src/Project/A.java ./stem/java/src/Project/B.java ./stem/java/src/Project/C.java ./stem/java/src/Project/D.java ./stem/java/src/Project/E.java ./stem/java/src/Project/F.java

在我的机器上运行相同的命令会产生以下形式的错误

.\stem\java\src\Project\A.java:460: 错误:包GRB不存在

其中 GRB 是 Gurobi 外部 .jar,它包含在 /lib/ 文件夹中,并在代码中多次使用。

然后我尝试通过 Windows 命令行而不是 Cygwin 运行相同的命令,但它给出了相同的错误消息

然后我尝试按照错误消息中的说明将转义字符从“/”更改为“\”,但这也不起作用。在 Windows cmd 中,错误与以前相同,但在 Cygwin 中是:

javac:找不到文件:.stemjavasrcProjectA.java

这个错误显然是 Cygwin 如何运行 makefile 的一些问题(它不可能是外部 jar 的构建路径的问题,否则它对我的合作者不起作用),但它可能是什么?

【问题讨论】:

    标签: java unix cygwin gnu


    【解决方案1】:

    即使您在 Cygwin 下运行,您仍在调用 Java 的 Windows 版本/发行版。

    Windows 版本的 Java 要求您使用分号 (;) 字符作为类路径分隔符(与 Linux 和 Mac 上使用的冒号 (:) 不同)。所以将你的makefile中的命令更改为

    javac -cp "./stem/java/lib/*;./stem/java/bin/Project.jar"...

    【讨论】:

    • 也就是说,您应该使用更现代的“构建工具”进行调查,例如 maven 或 gradle - 一旦您的项目变得更加复杂,make 将成为构建项目的一种非常笨拙的方式。
    猜你喜欢
    • 2011-09-16
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    相关资源
    最近更新 更多