我正在尝试编写一个构建我们项目的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版本。
答案 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。