使用Ant压缩Mac OS .app

时间:2011-11-01 18:47:59

标签: macos ant zip .app

我已经构建了一个Java / Swing应用程序,并且已经使用Ant,Windows(使用launch4j)和Mac(使用jarbundler ant任务)成功部署了它。 但是我想使用Ant将.app与其他文件一起压缩,但由于.app只是一个特殊的文件夹,我遇到了一些问题。这是我的Ant目标:

    <property name="jarbundler.dir" location="lib/jarbundler" />
    <taskdef name="jarbundler" 
         classname="net.sourceforge.jarbundler.JarBundler"
         classpath="${jarbundler.dir}/jarbundler-2.2.0.jar"/>
    <target name="app">
        <jarbundler dir="release" name="MobilityCollector" mainclass="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader" jar="mc.jar" icon="img/icon.icns"/>
        <zip destfile="release/MobilityCollector_MacOSX.zip">
            <zipfileset dir="img" prefix="img/"/>
            <zipfileset dir="release/MobilityCollector.app" prefix="MobilityCollector.app"/>
        </zip>
    </target>

问题在于:

<zip destfile="release/MobilityCollector_MacOSX.zip">
     <zipfileset dir="img" prefix="img/"/>
     <zipfileset dir="release/MobilityCollector.app" prefix="MobilityCollector.app"/>
</zip>

问题在于,当我运行应用程序时(在zippig和解压缩之后)它会一直在Dock中弹跳,如果我单击它,它会立即关闭。我认为这可能是权限问题,但权限与原始应用程序相同(在压缩之前)。

由于.app是一个特殊的文件夹,我是否需要以其他方式压缩它?我试着按照FailedDev建议的方式进行压缩,但无论如何都会发生。

3 个答案:

答案 0 :(得分:1)

我在压缩.app包时遇到了同样的问题。我发现在OS X命令行上使用zip实用程序可以正常使用.app。因此,我当前的解决方案基于使用此工具而不是ant任务:

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

这将在目录zip -r My-app.zip My.app的命令行上执行命令${basedir}/target

答案 1 :(得分:1)

问题出在Ant Zip任务中,当它捆绑.app / Contents / MacOS / JavaApplicationStub时。文件权限设置为644.此文件需要是可执行的。您可以通过指定以下内容来解决此问题:

<zip destfile="My-app.zip" level="9">
    <zipfileset filemode="755" dir="basedir" includes="My.app/**/*" />
</zip>

当您将文件模式更改为非默认值755时,您将JavaApplication存根设置为可执行文件,这应该会停止任务栏中的弹跳图标并实际启动您的应用程序。

如果这不能解决您的问题,您可以尝试使用在mac上运行的控制台应用程序启动应用程序,并查看日志的内容。

答案 2 :(得分:0)

来自documentation

  

资源集合用于选择要归档的文件组。

     

仅限Ant 1.7之前并且已得到支持   作为嵌套元素。

所以你可以使用你想要的任何集合,例如:

<fileset dir="release" includes"MobilityCollector.app/*">