【问题标题】:Runnable jar works on Mac; gives main class error on Windows可运行的 jar 在 Mac 上工作;在 Windows 上给出主类错误
【发布时间】:2015-05-30 22:35:44
【问题描述】:

我在 Mac 上使用 Eclipse 制作应用程序,并使用 File Export 来制作 Runnable Jar。我生成的 Runnable Jar 文件在我的 Mac 和另一台 Mac 上运行良好。但是在两台不同的 Windows 机器上,它们不会。我四处寻找答案,并尝试了以下方法:
1) 当我双击 jar 图标时,什么也没有发生。
2) 当我输入
java -jar Luscinia.jar
在命令提示符下,我得到:
“找不到或无法加载主类 lusc.net.github.Luscinia”
3) 当我输入
java -cp Luscinia.jar lusc.net.github.Luscinia
我收到相同的错误消息。

  • 一台 Windows 机器上的 JRE(至少)是最新的 (1.8.0_40)。 Mac 上的 JRE 也是如此。
  • 我的jar里面的文件结构确实有 Luscinia.class 嵌套在 github、net 和 lusc 目录中。
  • 清单包含以下行:
    类路径:.
    主类:lusc.net.github.Luscania
    (&它在底部包含两个空行)
  • 其他 jar 在两台 Windows 机器上运行良好。
  • 再次强调,它在两台 Mac 机器上运行良好。

有什么想法吗?

  • 我检查了 EOL 字符是否有效果。将其更改为 Windows \r\n 没有任何效果。 (感谢 RealSkeptic 的创意)。

【问题讨论】:

  • 确保清单文件的每一行末尾都有 CR 和 LF。在 Mac 上,它可能只是 CR 或只是 LF。
  • 感谢您的想法,但运气不佳。我将 Eclipse 中的选项更改为 Windows EOL (CR LF),清理并重建。我使用 od -c MANIFEST.MF 检查了清单,所有行都以 /r/n 结尾。但我仍然遇到同样的错误。
  • 此外,该错误表明 Windows JVM 已经解析了清单(它知道它必须查找 lusc.net.github.Luscinia),但它不能找不到/加载它...
  • 我不能确定它是在寻找 Luscinia 还是 Luscinia,并在其末尾有几个换行符(以及从 Windows 复制到 StackOverflow 时的外观)。但无论如何,当你消除它时,这就解决了。您是否尝试创建一个常规 jar(不可运行)以查看是否成功?
  • 我会从你的清单中删除 Class-Path: . 看看它是否有影响。

标签: java eclipse windows jar


【解决方案1】:

您确定您的类没有尝试加载 Windows JRE 中不可用的 Mac 特定类(供应商私有类?如 Windows 上的 com.sun 类),或者它没有缺少类路径中所需的依赖项主班?

如果在加载主类(例如在静态块中)时,您的依赖类之一无法加载,那么它也无法加载导入类,您可能会遇到这个问题。

无论如何,拥有主类的源代码可以帮助找出问题。

【讨论】:

  • 我相信这会更好地作为评论服务,因为它没有回答问题,但给出了尝试的建议。
  • 好吧,如果事实证明问题正是我所描述的,那不就是一个答案吗?
【解决方案2】:

DarkRift 提供的答案是正确的:

隐藏在一个文件中的是对 com.apple... 类的引用,该类是多余的,而且至关重要的是,特定于平台。

在这种情况下,当我收到错误消息时:

Could not find or load main class lusc.net.github.Luscinia

它的意思是“无法加载”而不是“找不到”。感谢您的所有建议。

【讨论】:

  • 当然,很抱歉错过了!
猜你喜欢
  • 2015-12-30
  • 1970-01-01
  • 2018-04-26
  • 2018-01-25
  • 2019-05-28
  • 2017-08-09
  • 2019-03-08
  • 2017-06-25
  • 1970-01-01
相关资源
最近更新 更多