我已经使用命令行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显然不需要它(它已被缓存)。
答案 0 :(得分:1)
简单可靠的解决方案是将您想要的svn用户名和密码存储在主目录的build.properties文件中,设置权限,以便其他用户无法读取它,并将其加载到您的ant脚本中。
我在构建脚本中依赖auth缓存并且它很烦人,因为迟早不会缓存身份验证,或者会缓存错误的身份验证,并且在您尝试意识到错误时会浪费时间。或者您可能决定在不同的环境中运行ant,例如构建服务器,这使得难以提供svn的身份验证缓存。最好从文件和程序中加载您的身份验证信息,以便在缺少该文件时发出明确的消息。
您还可以尝试使用svnkit命令行客户端来缓存您的身份验证,并查看在通过ant使用时是否仍然有效。
该主题讨论了同样的问题:http://www.nabble.com/svnant-and-authentication-td17865407.html