我使用JavaFX在Mac上创建了一个应用程序。我正在使用ant构建并将该应用程序压缩到一个文件夹中。
尝试使用
进行压缩<zip destfile="MyApp.zip" basedir="MyApp"/>
创建zip文件但不保留在MyApp / Contents.MacOS /
中找到的JavaAppLauncher的属性然后我尝试了这个命令 -
<exec executable="zip" dir="${basedir}/target">
<arg value="-r" />
<arg value="My-app.zip" />
<arg value="My.app" />
</exec>
在解压缩此zip文件时,我发现此应用程序也未启动。现在保留了JavaAppLauncher的属性,但是这次我面临的问题是没有保留在MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk中找到的 libjli.dylib (这是一个别名)的属性。 / Contents / MacOS,zip将其转换为动态库。
可能还有一些文件无法在zip上保留其属性。那么如何保留app中添加的libs,unix文件,别名等所有属性,这样我就可以在解压缩后成功启动它。
谢谢
答案 0 :(得分:3)
至少在我的系统上,libjli.dylib
是Unix风格的符号链接而不是Mac“别名”,在这种情况下,您应该能够将-y
选项添加到{{1}用于保留符号链接的命令
zip
如果它是mac意义上的别名而不是符号链接,那么您可以尝试使用ditto
,它可以构建拉链,以与Finder相同的<exec executable="zip" dir="${basedir}/target">
<arg value="-r" />
<arg value="-y" />
<arg value="My-app.zip" />
<arg value="My.app" />
</exec>
形式保留资源分叉和hfs元数据“创建存档”选项使用。为了正确提取这样的zip,用户必须在Finder中双击它(或使用ditto提取它),而不是使用__MACOSX
。
unzip
或者,正如娴静在评论中所暗示的那样,创建一个压缩磁盘映像,这是Mac用户期望分发其应用程序的正常方式
<exec executable="ditto" dir="${basedir}/target">
<arg value="-c" />
<arg value="-k" />
<arg value="--keepParent" />
<arg value="--sequesterRsrc" />
<arg value="My.app" />
<arg value="My-app.zip" />
</exec>
这会将<exec executable="hdiutil">
<arg value="create" />
<arg value="-srcfolder" />
<arg file="${basedir}/target" />
<arg value="-volname" />
<arg value="My App" />
<arg file="MyApp.dmg" />
</exec>
的全部内容打包到图片中,因此您可能需要稍微更改一些路径,以便target
中My.app
是唯一的内容(例如,在srcfolder
创建,然后将target/appbundle/My.app
作为target/appbundle
传递给-srcfolder
。