使用ant删除mac os x下svn工作副本文件夹中的所有文件

时间:2009-12-04 08:56:00

标签: svn ant macos

我正在尝试编写一个构建我们项目的ant脚本,并将新构建保存在一个提交给svn的dist文件夹中。随着每个构建文件名的更改,我需要删除dist文件夹中的所有旧文件(不知道名称)。

为此,我使用以下代码:

<exec executable="svn" outputproperty="__ignoreSvnDeleteDist">
    <arg value="delete"/>
<arg value="../dist/*"/>
</exec>

只要我在Windows机器上使用它就可以正常工作但是只要我在Mac Os X下试用它我就会收到以下错误:

[echo] SVN Delete res: svn: '../dist/*' does not exist

我比较过,我在两台机器(1.7.1)和相同的Java版本(Windows机箱为1.6.0_12,Mac机器为1.6.0_15)上使用相同的ant版本。

3 个答案:

答案 0 :(得分:1)

一些搜索后我找到了答案。我想你需要记住,exec命令不会创建一个shell来执行你的命令,但它会直接执行命令吗?

*由unix之类的系统下的shell评估。与Windows平台相反,在没有命令行解释器(http://wiki.apache.org/ant/AntOddities)的情况下评估通配符。

此脚本应该有效:

<exec executable="sh" outputproperty="__ignoreSvnDeleteDist">
    <arg value="-c"/>
    <arg value="svn delete ../dist/*"/>
</exec>

这里我们创建一个shell,并给它执行命令。不幸的是,现在只能在类似unix的系统下工作。

答案 1 :(得分:1)

不是自己执行“svn”命令,而是可以考虑来自Subclipse项目http://subclipse.tigris.org/svnant.html的优秀SvnAnt任务。它使得处理svn相关任务变得更加容易。您的问题的代码可能类似于

<svn>
  <delete> 
    <fileset dir="../dist">
      <include name="**/*"/>
    </fileset>
  </delete>
  <commit message="commit deleted files" dir="../dist"/>
</svn>

答案 2 :(得分:0)

有一个简单的解决方案:不要将构建提交给SVN。

如果您的构建过程太脆弱而无法从源重新创建任何分发,那么您应该修复构建过程。考虑设置一个CI服务器,如hudson