【问题标题】:Could not find or load main class in java: Windows vs Ubuntu无法在 java 中找到或加载主类:Windows vs Ubuntu
【发布时间】:2014-08-26 00:07:24
【问题描述】:

当我在 Windows 中运行以下命令时,它可以正常工作:

java -cp bin\;lib/myJar.jar com.example.MyClass

但我无法让它在 Ubuntu 中工作(它说找不到或加载主类)。我在 SO 中阅读了几篇文章,我认为问题在于需要设置类路径的方式,但我无法弄清楚如何修改 bin\;lib/myJar.jar 以在 ubuntu 上正确运行。

【问题讨论】:

  • 此时你原问题的不完整性不仅很清楚,而且是一个断点。这是您不想记录的两个“已经尝试过”的案例,而且您还没有分享您如何知道“它不起作用”。你一定是遇到了一个错误,发布它,这样我们就不必在黑暗中抓住稻草了。
  • 我尝试了 :, \:, : 的各种组合。 (在阅读官方 Java 文档和关于 SO 的帖子时),尽管发布我尝试过的所有组合并不是很聪明。另外问题总是“找不到或无法加载主类)
  • 完成是明智的。
  • 首先,为什么要提供两个位置,其中哪个应该包含类文件,接下来,您是否验证类文件在预期位置 关于大写和小写的名称是否正确?你检查jar tf lib/myJar.jarls -R bin的输出了吗?
  • 哦,对了,昨天忘记问了……你考虑过把它设为executable jar吗?

标签: java windows ubuntu classpath


【解决方案1】:

你是在 UNIX 系统中执行你的 cmd,你应该遵循 unix 的约定:

不要使用\ 作为目录分隔符,而是使用/。 不要使用; 作为类路径分隔符,而是使用:

所以你必须移动到你的 myJar.jar 所在的目录,如果你要执行的主类应该在 jar 中,然后使用命令检查它是否真的在那里:

jar tf jar-file

这将打印您的 jar 的内容。如果您在同一文件夹中有一个文件夹 bin,您可以将其添加到类路径中

然后使用

java -cp "bin/:lib/myJar.jar" com.example.MyClass

【讨论】:

    【解决方案2】:

    基于 UNIX 的操作系统无法识别目录路径中的反斜杠。

    尝试改用bin/

    附带说明,Windows 会将\/ 识别为目录分隔符。

    【讨论】:

    • 分号也要换成冒号。
    • @Gimby 好点,我没有意识到 Oracle 有基于操作系统的 Classpath 的单独文档文件(WindowsUNIX)。虽然我猜 Classpath 会遵循操作系统的路径分隔符规则是有道理的。
    猜你喜欢
    • 2014-05-10
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2014-08-02
    • 2014-12-20
    • 2016-05-23
    相关资源
    最近更新 更多