OSX Java App Bundle在HFS +上运行,但不在APFS

时间:2017-10-04 09:57:32

标签: java macos macos-high-sierra app-bundle apfs

我遇到过这个问题,我发现网上没有任何信息,并希望得到一些帮助,因为我在过去的几天里一直在努力解决这个问题。

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

当我检查应用程序日志时,事实证明,由于某些原因,当应用程序从格式化为APFS的SSD运行时,某些库未被应用程序正确导入/识别。为什么APFS SSD与HFS + usb /硬盘驱动器的行为不同?

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

其他信息:

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

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

1 个答案:

答案 0 :(得分:2)

I’ve managed to fix the above issue, but I’m unsure as to why.

Solution: Update commons.lang.2.6 to commons.lang.3.6

Currently, I’m hoping that it will not encounter any other issue aside from that, but I can only guess as to what was happening.

I think APFS cached a copy of commons.lang.3.6 and used that library instead of my own, so there was an issue with class loaders trying to find the 2.6 version. Since only APFS would have a cached copy, it would allow my app to run on a USB.


I don’t actually know the correct etiquette for finding out the answer to your own question, so please feel free to correct my post if there’s anything I need to change.