如何使用ANT任务从SVN结账?

Jos*_*osh 16 svn ant

我对任何可以创建Ant任务以从SubVersion签出文件的方式感兴趣.我"只是"想要从命令行进行结账.我已经使用Eclipse和Ant和SubVersion一段时间了,但我的Ant和SubVersion知识有点缺乏,因为我依靠Eclipse将它们连接在一起.

我一直在寻找SvnAnt作为一个解决方案,它是来自Tigris的Subclipse的一部分,位于http://subclipse.tigris.org/svnant/svn.html.它可能工作正常,但我得到的是NoClassDefFoundErrors.对于更有经验的人来说这可能看起来像一个简单的Ant配置问题,但我不知道.我将svnant.jar和svnclientadapter.jar复制到我的Ant lib目录中.然后我尝试运行以下内容:

<?xml version="1.0"?>

<project name="blah"> 

 <property environment="env"/>

 <path id="svnant.classpath">
  <pathelement location="${env.ANT_HOME}/lib"/>
  <fileset dir="${env.ANT_HOME}/lib/">
   <include name="svnant.jar"/>
  </fileset>
 </path>

 <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" /> 

 <target name="checkout">
  <svn username="abc" password="123">
   <checkout url="svn://blah/blah/trunk" destPath="workingcopy"/>
  </svn>
 </target>

</project>
Run Code Online (Sandbox Code Playgroud)

我得到以下回复:

build.xml:17: java.lang.NoClassDefFoundError: org/tigris/subversion/javahl/SVNClientInterface
Run Code Online (Sandbox Code Playgroud)

我在Windows XP 32位上运行SVN 1.7和SvnAnt 1.3.

感谢您的任何指示!

JW.*_*JW. 24

如果你没有让SvnAnt工作,你总是可以使用exec:

<exec executable="/usr/local/bin/svn">
    <arg value="co" />
    <arg value="svn://repository/url" />
    <arg value="/destination/directory" />
</exec>
Run Code Online (Sandbox Code Playgroud)

  • 从理论上讲,您希望避免在ant任务中使用<exec>,因为它的跨平台兼容性较低.但这在所有情况下并不重要. (2认同)
  • 这是我案例中最好的解决方案.非常简单(只需安装一个svn客户端(在我的情况下是Sliksvn),将PATH指向sliksvn/bin,这就是全部.svnant和javahl是一团糟...... (2认同)

Wil*_*leu 7

从该错误看,您可能也需要在类路径上使用JavaHL jar(JavaHL是Subversion API的Java语言绑定).你一个

此URL可能有所帮助:http: //subclipse.tigris.org/wiki/JavaHL

否则,您可以使用使用Ant来运行本机命令(但这会使其依赖于操作系统).


ome*_*med 5

让我们看看这可以帮助你,我复制svnjavahl.jar,svnClientAdapter.jar和svnant.jar到我的$ ANT_HOME/lib文件夹中.

然后在xml文件中:

    <path id="svnant.classpath">
    <fileset dir="${ABSOLUTE-PATH-TO-ANT-HOME}/lib">
        <include name="**/*.jar"/>
    </fileset>
</path>

<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" /> 
Run Code Online (Sandbox Code Playgroud)

然后,退房..

    <svn dateFormatter="yyyy-MM-dd HH:mm">
    <checkout url="${MY-REPO-PATH}" 
              destpath="${checkout.dir}/MODULE-NAME" 
                      ....
</svn>
Run Code Online (Sandbox Code Playgroud)

我认为您收到错误是因为您没有将svnjavahl.jar文件复制到lib文件夹中.这样做,它应该工作.

刚注意到一些东西,你包括一个罐子,**/*.jar不像我一样,所以它找不到你的svnjavahl.jar.