我正在使用ant工具构建dmg文件,但是在构建时出现错误。

提取build.xml:

            ...
            <copy todir="${mac.build.dir}/.background">
                    <fileset file="${basedir}/build/installer/images/mac/dmgBackground.png"/>
            </copy>

            <symlink link="${mac.build.dir}/Applications" overwrite="true" resource="/Applications" />
            <echo message="Create tmp.dmg"/>
            <exec executable="hdiutil" failonerror="true">
                    <arg line="create -srcfolder '${mac.build.dir}' -volname '${mac.volname}' -fs HFS+ -fsargs '-c c=64,a=16,e=16' -format UDRW '${target}/tmp.dmg'"/>
            </exec>
            ....


错误:

**BUILD FAILED
D:\DevProjects\spark\build\build.xml:761: Could not launch ln: java.io.IOException: Cannot run program "ln": CreateProcess error=2, The system cannot find the file specified**


我用脚本来调用dmg文件创建的是ant installer.mac

我是调用正确的目标还是错误的目标?

最佳答案

Ant的symlink任务不适用于Windows变体。

参见SO:Ant symlink task on windows (NTFS)

Ant documentation


  在基于Unix的平台上管理符号链接。可用于制作单个链接,删除链接,从属性文件创建多个链接或创建描述指定目录中链接的属性文件。默认情况下,现有链接不会覆盖。


...和...


  限制:由于Java不直接支持处理符号链接,因此该任务通过比较规范路径和绝对路径来区分它们。在非unix系统上,这可能会导致误报。此外,命令ln -s在命令行上不是有效命令的任何操作系统都将无法使用action =“ single”或action =“ recreate”。 Action =“ record”和action = delete应该仍然有效。最后,Java中缺少对符号链接的支持,这意味着所有链接都记录为指向规范资源名称的链接。因此,链接:link-> subdir / dir /../ foo.bar将记录为link = subdir / foo.bar并恢复为link-> subdir / foo.bar




至于如何解决它,我现在已经超出了深度,因为我以前从未做过DMG。但是,符号链接是指向“应用程序”文件夹的链接,并且可以简单地位于该链接中,以便用户可以方便地将应用程序拖动到该链接,以便将其复制到“应用程序”中。因此,该链接可能并非严格必要。如果有人可以照亮它,请这样做。

07-28 02:21
查看更多