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

Posted

技术标签:

【中文标题】OSX Java App Bundle 可在 HFS+ 上运行,但不能在 APFS 上运行【英文标题】:OSX Java App Bundle runs on HFS+ but not APFS 【发布时间】:2018-03-15 16:16:48 【问题描述】:

我一直遇到这个问题,我发现在网络上没有任何信息,并且希望得到一些帮助,因为我过去几天一直在处理这个问题,但没有任何线索。

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

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

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

附加信息:

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

感谢您的关注,如果您有任何建议,我们将不胜感激!

【问题讨论】:

您能否提供更多关于未正确识别的库的信息? @AleksandrMukhalov 我在原始问题中添加了一些库。感谢收看! APFS 是否配置为区分大小写(曾经只有这个变体可用)?您的 HFS+ USB 驱动器(通常不是)呢?类加载器和包依赖于文件名 @BrunoGrieder 我认为 Apple 正式发布的变体会区分大小写?我想我找到了解决方案,所以我会发布它。 【参考方案1】:

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

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

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

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


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

【讨论】:

以上是关于OSX Java App Bundle 可在 HFS+ 上运行,但不能在 APFS 上运行的主要内容,如果未能解决你的问题,请参考以下文章

Bundle 无法在 Mac OSX 10.7 上安装 RMagick gem

Qt + CMake for OSX Bundle:Cocoa 平台插件

使用终端在 OSx 上获取主 HDD 串行

HF Java Chap 1

Safari调试

将 android app bundle 上传到 playstore 时出错。。您的 app bundle 的目标是无法识别的语言 jp