【问题标题】:What would cause bash to be unable to execute a .jar written and compiled on my own machine?什么会导致 bash 无法执行在我自己的机器上编写和编译的 .jar?
【发布时间】:2026-01-29 11:20:09
【问题描述】:

昨天运行良好,使用java -jar ... 运行良好,但是现在当我尝试运行它时,得到的响应是:

-bash: ./Shuffle: cannot execute binary file

这是 Makefile 的 sn-p:

$(JARFILE): $(CLASSES)
    echo Main-class: $(MAINCLASS) > Manifest
    jar cvfm $(JARFILE) Manifest $(JARCLASSES)
    chmod +x $(JARFILE)
    rm Manifest

我正在运行 Mac OS X 10.6.8,并尝试重新安装昨天发布的 Java for Mac OS X 10.6 Update 5 更新,但没有成功。有什么想法吗?

【问题讨论】:

  • 对于那些以后可能会参考的人,我重新安装了 OS X(非常简单/方便)并且问题得到了解决。

标签: java macos unix


【解决方案1】:

我假设 Shuffle 是你的 jar 文件的名称。

Bash 根本不知道如何执行 jar 文件。 Jar 文件不是可执行文件。它们是 zip 存档,内部具有某些预定义的文件结构。*提供了很好的解释:http://en.wikipedia.org/wiki/JAR_file

要从 bash 运行 jar 文件,您可以创建一个 bash 脚本。一个简单的例子是:

#!/bin/bash

java -jar Shuffle

顺便说一句,由于 jar 文件不是可执行文件,您可以从 Makefile 中删除 chmod +x $(JARFILE)

【讨论】:

  • 在 Mac 上和在 Windows 上一样 jar 文件是 executeabel 文件!!
  • 这是不正确的。在 Windows 上,jar 文件与 javaw.exe 之间存在文件关联,这相当于 java.exe,但没有关联的控制台窗口。结果,当“启动”一个 jar 文件时,它只是用 javaw.exe 打开。我假设在 Mac 上也有类似的关联。