Java install4j支持通过System.loadLibrary加载dyld库的代码签名MacOS控制台启动器
我使用install4j 8.0.8创建的MacOS文件夹DMG媒体文件有问题。如果对包进行代码签名,则所有内容都会正确签名,包括驻留在lib/目录中的*.dyld文件。此外,我的GUI程序工作正常,对System.loadLibrary()的调用成功并正确加载dyld文件。但是,调用与GUI程序相同Java代码的命令行程序在到达System.loadLibrary()调用时失败,并显示以下消息:Java install4j支持通过System.loadLibrary加载dyld库的代码签名MacOS控制台启动器,java,macos,install4j,dyld,notarize,Java,Macos,Install4j,Dyld,Notarize,我使用install4j 8.0.8创建的MacOS文件夹DMG媒体文件有问题。如果对包进行代码签名,则所有内容都会正确签名,包括驻留在lib/目录中的*.dyld文件。此外,我的GUI程序工作正常,对System.loadLibrary()的调用成功并正确加载dyld文件。但是,调用与GUI程序相同Java代码的命令行程序在到达System.loadLibrary()调用时失败,并显示以下消息: java.lang.UnsatisfiedLinkError: jhdf5 (Not found
java.lang.UnsatisfiedLinkError: jhdf5 (Not found in java.library.path)
at java.base/java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:1745)
at java.base/java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:1697)
at java.base/java.lang.System.loadLibrary(System.java:591)
但是,如果在为MacOS构建媒体文件时禁用代码签名(我通过从Ant传递disableSigning=true来实现),GUI和命令行程序都可以正常工作
所以,我可能不明白在MacOS上从控制台启动器和GUI启动器(我运行的是Big Sur)运行程序时,是否需要对Java VM参数做一些额外的操作。或者,在需要加载dyld文件的代码签名媒体文件中运行控制台启动器是不可能的?可能是因为控制台启动器是作为脚本在MacOS上实现的。install4j 8文档似乎没有提到我能找到的这种细微差别
已安装文件的目录结构如下所示:
Peters-MacBook-Pro-16:CoastWatch Utilities Signed phollema$ ll
total 4224
drwxr-xr-x 10 phollema admin 320 9 Apr 17:25 .
drwxrwxr-x 37 root admin 1184 9 Apr 17:24 ..
drwxr-xr-x 53 phollema admin 1696 9 Apr 17:25 .install4j
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Utilities Uninstaller.app
drwxr-xr-x 25 phollema admin 800 9 Apr 18:50 bin
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 data
drwxr-xr-x 8 phollema admin 256 9 Apr 17:25 doc
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 extensions
drwxr-xr-x 4 phollema admin 128 9 Apr 17:25 lib
-rw-r--r-- 1 phollema admin 1608406 9 Apr 17:12 src.zip
Peters-MacBook-Pro-16:CoastWatch Utilities Signed phollema$ ll bin
total 624
drwxr-xr-x 25 phollema admin 800 9 Apr 18:50 .
drwxr-xr-x 10 phollema admin 320 9 Apr 17:25 ..
-rw-r--r--@ 1 phollema admin 6148 9 Apr 18:50 .DS_Store
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Data Analysis Tool.app
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Master Tool.app
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Status Tool.app
-rwxr-xr-x 1 phollema admin 14801 9 Apr 17:12 cwangles
-rwxr-xr-x 1 phollema admin 14803 9 Apr 17:12 cwautonav
-rwxr-xr-x 1 phollema admin 14829 9 Apr 17:12 cwcomposite
-rwxr-xr-x 1 phollema admin 14827 9 Apr 17:12 cwcoverage
-rwxr-xr-x 1 phollema admin 14805 9 Apr 17:12 cwdownload
-rwxr-xr-x 1 phollema admin 14801 9 Apr 17:12 cwexport
-rwxr-xr-x 1 phollema admin 14827 9 Apr 17:12 cwgraphics
-rwxr-xr-x 1 phollema admin 14789 9 Apr 17:12 cwgscript
-rwxr-xr-x 1 phollema admin 14823 9 Apr 17:12 cwimport
-rwxr-xr-x 1 phollema admin 14797 9 Apr 17:12 cwinfo
-rwxr-xr-x 1 phollema admin 14819 9 Apr 17:12 cwmath
-rwxr-xr-x 1 phollema admin 14805 9 Apr 17:12 cwnavigate
-rwxr-xr-x 1 phollema admin 14829 9 Apr 17:12 cwregister
-rwxr-xr-x 1 phollema admin 14831 9 Apr 17:12 cwregister2
-rwxr-xr-x 1 phollema admin 14823 9 Apr 17:12 cwrender
-rwxr-xr-x 1 phollema admin 14801 9 Apr 17:12 cwsample
-rwxr-xr-x 1 phollema admin 14841 9 Apr 17:12 cwscript
-rwxr-xr-x 1 phollema admin 14799 9 Apr 17:12 cwstats
-rwxr-xr-x 1 phollema admin 14763 9 Apr 17:12 hdatt
Peters-MacBook-Pro-16:CoastWatch Utilities Signed phollema$ ll lib/native/macosx_x86_64/
total 12544
drwxr-xr-x 4 phollema admin 128 9 Apr 17:25 .
drwxr-xr-x 3 phollema admin 96 9 Apr 17:25 ..
-rw-r--r-- 1 phollema admin 1748128 9 Apr 17:12 libjhdf.dylib
-rw-r--r-- 1 phollema admin 3536000 9 Apr 17:12 libjhdf5.dylib
DYLD_LIBRARY_PATH="$app_home/lib/native/macosx_x86_64:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
此外,控制台启动器脚本包含一行代码,添加到DYLD\u库\u路径中,如下所示:
Peters-MacBook-Pro-16:CoastWatch Utilities Signed phollema$ ll
total 4224
drwxr-xr-x 10 phollema admin 320 9 Apr 17:25 .
drwxrwxr-x 37 root admin 1184 9 Apr 17:24 ..
drwxr-xr-x 53 phollema admin 1696 9 Apr 17:25 .install4j
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Utilities Uninstaller.app
drwxr-xr-x 25 phollema admin 800 9 Apr 18:50 bin
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 data
drwxr-xr-x 8 phollema admin 256 9 Apr 17:25 doc
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 extensions
drwxr-xr-x 4 phollema admin 128 9 Apr 17:25 lib
-rw-r--r-- 1 phollema admin 1608406 9 Apr 17:12 src.zip
Peters-MacBook-Pro-16:CoastWatch Utilities Signed phollema$ ll bin
total 624
drwxr-xr-x 25 phollema admin 800 9 Apr 18:50 .
drwxr-xr-x 10 phollema admin 320 9 Apr 17:25 ..
-rw-r--r--@ 1 phollema admin 6148 9 Apr 18:50 .DS_Store
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Data Analysis Tool.app
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Master Tool.app
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Status Tool.app
-rwxr-xr-x 1 phollema admin 14801 9 Apr 17:12 cwangles
-rwxr-xr-x 1 phollema admin 14803 9 Apr 17:12 cwautonav
-rwxr-xr-x 1 phollema admin 14829 9 Apr 17:12 cwcomposite
-rwxr-xr-x 1 phollema admin 14827 9 Apr 17:12 cwcoverage
-rwxr-xr-x 1 phollema admin 14805 9 Apr 17:12 cwdownload
-rwxr-xr-x 1 phollema admin 14801 9 Apr 17:12 cwexport
-rwxr-xr-x 1 phollema admin 14827 9 Apr 17:12 cwgraphics
-rwxr-xr-x 1 phollema admin 14789 9 Apr 17:12 cwgscript
-rwxr-xr-x 1 phollema admin 14823 9 Apr 17:12 cwimport
-rwxr-xr-x 1 phollema admin 14797 9 Apr 17:12 cwinfo
-rwxr-xr-x 1 phollema admin 14819 9 Apr 17:12 cwmath
-rwxr-xr-x 1 phollema admin 14805 9 Apr 17:12 cwnavigate
-rwxr-xr-x 1 phollema admin 14829 9 Apr 17:12 cwregister
-rwxr-xr-x 1 phollema admin 14831 9 Apr 17:12 cwregister2
-rwxr-xr-x 1 phollema admin 14823 9 Apr 17:12 cwrender
-rwxr-xr-x 1 phollema admin 14801 9 Apr 17:12 cwsample
-rwxr-xr-x 1 phollema admin 14841 9 Apr 17:12 cwscript
-rwxr-xr-x 1 phollema admin 14799 9 Apr 17:12 cwstats
-rwxr-xr-x 1 phollema admin 14763 9 Apr 17:12 hdatt
Peters-MacBook-Pro-16:CoastWatch Utilities Signed phollema$ ll lib/native/macosx_x86_64/
total 12544
drwxr-xr-x 4 phollema admin 128 9 Apr 17:25 .
drwxr-xr-x 3 phollema admin 96 9 Apr 17:25 ..
-rw-r--r-- 1 phollema admin 1748128 9 Apr 17:12 libjhdf.dylib
-rw-r--r-- 1 phollema admin 3536000 9 Apr 17:12 libjhdf5.dylib
DYLD_LIBRARY_PATH="$app_home/lib/native/macosx_x86_64:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
如果我没有对媒体文件签名,并且控制台启动器脚本是相同的,那么所有这些都会起作用。公证要求启用“强化运行时”,除非为启动器可执行文件设置了特定权限,否则它会阻止使用DYLD\u LIBRARY\u PATH
。从install4j 9.0.1开始,只能为GUI启动器设置权限,而不能为捆绑JRE的java可执行文件设置权限,这是命令行启动器所需要的
但是,设置-Djava.library.path
是一个很好的解决方案,比设置权限更可取。什么是“我的GUI程序”和“我的命令行程序”?所有内容都驻留在同一个代码签名包中吗?所有内容都驻留在install4j安装程序安装的同一个基本目录中。我有一个名为bin/的目录,其中包含GUI启动器(名为ending in.app)和控制台启动器(仅包含bash脚本)。启动器没有签名,但DMG媒体文件已经签名并由苹果公司成功公证,DMG和JAR内部的二进制文件都已经签名并公证。我想我可能已经发现了问题,但最好得到确认。似乎如果我在控制台启动程序脚本的java命令行中添加-Djava.library.path=$app\u home/lib/native/macosx\u x86\u 64
,它们运行良好。因此,即使设置并导出了DYLD_LIBRARY_PATH
,签名的install4j媒体文件中包含的java可执行文件也不会侦听环境变量,而是侦听命令行参数。