【问题标题】:OSX Java App Bundle works on one Mac, but not on another.OSX Java App Bundle 可以在一台 Mac 上运行,但不能在另一台 Mac 上运行。
【发布时间】:2015-02-17 18:46:55
【问题描述】:

我编写了一个 java 应用程序,并使用 Oracle 的 appbundler ANT 任务将其打包到 OSX App Bundle 中。该应用程序包在它开发的机器(MacBook Pro)上运行良好,但是当我将它复制到我的 MacBook Air 时,它无法启动,并出现错误提示“无法打开应用程序'MyApp'”。根本没有其他诊断或信息。

两台 Mac 都运行最新版本的 Yosemite,都在安全首选项中启用了“从任何位置运行应用程序”,并且都安装了 Java 1.8。如果我将 Jars 直接复制到 MacBook Air,然后双击主类 Jar,应用程序会正确启动 - 所以这与捆绑有关,而不是 java 应用程序本身。

任何想法从哪里开始调试?

【问题讨论】:

  • 如果有帮助,这里是 App Bundle:drive.google.com/…(该应用是 OSX 的 Picasa Sync 客户端 - 请注意,它仍在开发中... :)) 很快就会将其放在 github 上)。
  • 您在尝试启动应用程序时是否检查了控制台以查看是否有任何错误?如果你使用 shell 启动启动器会发生什么?
  • 谢谢,我还没有尝试从命令行启动捆绑包;我今晚试试。通过 Finder 启动捆绑包时,有没有办法查看任何错误等? (我对 Mac 比较陌生...)。当您说“使用 shell”时,您是指通过终端吗?
  • 如何将包从一台机器复制到另一台机器?可能是 Contents/MacOS 中的存根在传输过程中丢失了执行权限位。
  • “检查控制台”是指 Console.app,它显示系统日志消息以及双击应用程序打印到其 stdout/stderr 的任何内容

标签: java macos bundle


【解决方案1】:

应用程序包在开发它的机器(MacBook Pro)上运行良好,但是当我将它复制到我的 MacBook Air 时,它无法启动

那么问题可能出在您在两台机器之间复制应用程序包的方式上 - 无论您使用何种机制进行复制,您都需要确保它保留包中文件的权限设置,特别是Contents/MacOS 中的可执行存根在目标系统上仍然是可执行的。如果您将 .app 打包到 .zip 文件中(右键单击 Finder 中的应用程序,“压缩(应用程序名称)”并复制 zip 文件而不是 .app 目录本身,则应该保留权限。

【讨论】:

    【解决方案2】:

    您是否有可能在一台或两台 Mac 上安装了多个 Java 版本?如果是这样,您是否检查过您的 JAVA_HOME 设置为什么? /usr/libexec/java_home 脚本对于找出你有哪些不同的 Java 安装很有用,例如 java_home -V

    Apple java_home docs

    【讨论】:

    • appbundler 任务不关心你安装了哪些 JDK。它的启动器存根使用应用程序包内的嵌入式 JRE 或硬编码路径 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin 下的单个公共 JRE
    • 有趣。您使用的是哪一个(嵌入式或公共)?
    • 我没有将 JRE 嵌入到应用程序包中。
    猜你喜欢
    • 2011-07-10
    • 2018-03-15
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多