我一直遇到这个问题,我发现网上没有任何信息,我想寻求一些帮助,因为过去几天我一直在努力解决这个问题,但没有任何线索。

为什么我的 Java 应用程序突然停止为 APFS 工作?如果我将应用程序移动到非 APFS USB,它会工作,但是当我将应用程序移动到格式化为 APFS 的 SSD 时,它会停止工作。

当我检查应用程序日志时,结果发现由于某种原因,当应用程序从格式化为 APFS 的 SSD 运行时,应用程序没有正确导入/识别某些库。为什么它在 APFS SSD 与 HFS+ USB/硬盘驱动器中的行为会有所不同?

我已经隔离了这个案例,发现只有APFS是共同因素。我已经在其他设备上测试过它,那些在没有 APFS 驱动器的情况下运行 High Sierra 的设备,以及那些使用尚未转换为 APFS 驱动器的 SSD 运行 Sierra 的设备,只有那些使用 APFS 文件系统格式的设备才会遇到问题。

附加信息:

  • Java App 已经过正确签名,它是个人分发的,但不是通过 App Store 分发的。
  • 应用程序是使用 AppBundler 而不是 JavaPackager 捆绑的。
  • 应用程序在以前版本的 OSX 上运行,并且已经在数百个 Mac 设备上进行了分发和测试,其中 OSX 在 10.8 - 10.12 之间变化
  • 以某种方式无法识别的库是 apache 库,例如 commons-lang-2.6(我们还没有升级到 3)、commons-logging(必须手动将日志输出到桌面上以查看发生了什么)。奇怪的是,应用程序能够正确导入 sqlite 库。

  • 感谢您的关注,并感谢您的任何建议!

    最佳答案

    我已经设法解决了上述问题,但我不确定为什么。

    解决方案:
    将 commons.lang.2.6 更新为 commons.lang.3.6

    目前,我希望它不会遇到除此之外的任何其他问题,但我只能猜测发生了什么。

    我认为 APFS 缓存了 commons.lang.3.6 的副本并使用该库而不是我自己的库,因此类加载器在尝试查找 2.6 版本时存在问题。由于只有 APFS 会有缓存副本,它允许我的应用程序在 USB 上运行。

    我实际上不知道找出您自己问题的答案的正确礼节,因此,如果我需要更改任何内容,请随时更正我的帖子。

    10-08 09:09