3

我使用 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/Contents/MacOS 找到的libjli.dylib(这是一个别名)的属性,zip 转换它到动态库。

可能还有一些文件未能在 zip 上保留其属性。那么如何保存app里面添加的libs、unix文件、别名等的所有属性,以便解压后可以成功启动。

谢谢

4

1 回答 1

4

至少在我的系统上,libjli.dylib是 Unix 风格的符号链接而不是 Mac“别名”,在这种情况下,您应该能够将-y选项添加到zip命令中以保留符号链接

<exec executable="zip" dir="${basedir}/target">
  <arg value="-r" />
  <arg value="-y" />
  <arg value="My-app.zip" />
  <arg value="My.app" />
</exec>

如果它是 mac 意义上的别名而不是符号链接,那么您可以尝试使用,它可以构建 zip,以与Finder 的“创建存档”选项使用ditto的相同形式保存资源分叉和 hfs 元数据。__MACOSX为了正确提取这样的 zip,用户必须在 Finder 中双击它(或同上提取它)而不是使用unzip.

<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>

或者,正如评论中端庄的建议,创建一个压缩的磁盘映像,这是 Mac 用户期望他们的应用程序分发的正常方式

<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(例如,在 at 创建它,target/appbundle/My.app然后target/appbundle作为-srcfolderto传递hdiutil)。

于 2013-05-30T17:10:54.867 回答