如何压缩保存所有属性的Mac应用程序

时间:2013-05-30 15:35:44

标签: java macos ant zip

我使用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文件,别名等所有属性,这样我就可以在解压缩后成功启动它。

谢谢

1 个答案:

答案 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> 的全部内容打包到图片中,因此您可能需要稍微更改一些路径,以便targetMy.app是唯一的内容(例如,在srcfolder创建,然后将target/appbundle/My.app作为target/appbundle传递给-srcfolder