gpt4 book ai didi

java - 如何压缩保留所有属性的 Mac 应用程序

转载 作者:行者123 更新时间:2023-11-30 07:16:33 33 4
gpt4 key购买 nike

我在 Mac 上使用 JavaFX 创建了一个应用程序。我正在使用 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 上保留其属性。那么如何保留应用程序中添加的库、unix 文件、别名等所有属性,以便我在解压缩后能够成功启动它。

谢谢

最佳答案

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

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

如果它是 mac 意义上的别名而不是符号链接(symbolic link),那么您可以尝试使用 ditto ,它可以构建以与 Finder 的“创建存档”选项使用的相同 __MACOSX 形式保存资源分支和 hfs 元数据的 zip。为了正确提取此类 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 中(例如,在 target/appbundle/My.app 中创建它,然后将 target/appbundle 作为 -srcfolderhdiutil)。

关于java - 如何压缩保留所有属性的 Mac 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16840282/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com