在没有用户名或密码的情况下使用svnant

时间:2009-05-19 16:48:00

标签: svn ant svnant

我已经使用命令行SVN检出了代码。我有一个我想要运行的Ant构建脚本,它将在完成后执行提交。

我想使用svnant,例如

<svn svnkit="false" javahl="false" failonerror="true">
    <commit dir="${dir}" message="${message}"/>
</svn>

但它不起作用并发出此错误

[svn] <Commit> started ...
[svn] svn: Commit failed (details follow):
[svn] svn: OPTIONS of 'http://svn.local/path/to/my/proj': authorization failed (http://svn.local)
[svn] <Commit> failed !

但是,如果我直接执行exec,就像这样

<exec executable="svn">
    <arg line="commit ${dir} -m '${message}'"/>
</exec>

它会正常工作。奇怪的是,使用svnkit="false"javahl="false"应该使svnant使用命令行svn。

那么这里发生了什么?我不应该在svnant调用中指定用户名/密码,因为命令行svn显然不需要它(它已被缓存)。

1 个答案:

答案 0 :(得分:1)

简单可靠的解决方案是将您想要的svn用户名和密码存储在主目录的build.properties文件中,设置权限,以便其他用户无法读取它,并将其加载到您的ant脚本中。

我在构建脚本中依赖auth缓存并且它很烦人,因为迟早不会缓存身份验证,或者会缓存错误的身份验证,并且在您尝试意识到错误时会浪费时间。或者您可能决定在不同的环境中运行ant,例如构建服务器,这使得难以提供svn的身份验证缓存。最好从文件和程序中加载您的身份验证信息,以便在缺少该文件时发出明确的消息。

您还可以尝试使用svnkit命令行客户端来缓存您的身份验证,并查看在通过ant使用时是否仍然有效。

该主题讨论了同样的问题:http://www.nabble.com/svnant-and-authentication-td17865407.html