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

时间:2010-03-08 11:27:19

标签: svn ant

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

我一直在关注SvnAnt作为一个解决方案,它是Tigris在http://subclipse.tigris.org/svnant/svn.html的Subclipse的一部分。它可能工作正常,但我得到的是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>

我得到以下回复:

build.xml:17: java.lang.NoClassDefFoundError: org/tigris/subversion/javahl/SVNClientInterface

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

感谢您的任何指示!

7 个答案:

答案 0 :(得分:24)

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

<exec executable="/usr/local/bin/svn">
    <arg value="co" />
    <arg value="svn://repository/url" />
    <arg value="/destination/directory" />
</exec>

答案 1 :(得分:7)

从该错误看,您似乎也需要类路径上的JavaHL jar(JavaHL是Subversion API的Java语言绑定)。你是

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

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

答案 2 :(得分: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" /> 

然后,退房..

    <svn dateFormatter="yyyy-MM-dd HH:mm">
    <checkout url="${MY-REPO-PATH}" 
              destpath="${checkout.dir}/MODULE-NAME" 
                      ....
</svn>

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

刚注意到一些事情,你包括一个罐子,而不是像我一样**/*.jar,因此无法找到你的svnjavahl.jar.

答案 3 :(得分:3)

如果您尝试让Ant使用命令行客户端,则可能必须执行以下操作:

<svn username="abc" password="123" javahl="false" svnkit="false"> 

答案 4 :(得分:3)

  1. ANT_HOME / lib(以及${user.home}/.ant/lib和其他一些地方)中的所有.jar文件都是自动可用的,因此<typedef>根本不需要类路径。

  2. 尚未针对1.7版更新svnant发行版。你仍然可以使用svnant.jar,但是你需要从svnant.1.3替换这些jar。

    svnClientAdapter.jar
    svnjavahl.jar
    

    更新版本。我从subclipse 1.8发行版中提取了这些内容,甚至不必重命名它们:

    org.tigris.subversion.clientadapter.javahl_1.7.2.jar
    org.tigris.subversion.clientadapter_1.8.0.jar
    

答案 5 :(得分:0)

我的设置几乎相同,问题相同。

我通过删除2个svn * .jar来解决这个问题,我将在我的ant安装中(在debian上)放在

/usr/share/ant/lib

更早。 Ant被多个罐子混淆了。

答案 6 :(得分:0)

我发现此页面非常有助于实现这一目标。对于最新版本,我发现设置svn设置的批准方式如下:

<svnSetting svnkit="true" javahl="false" id="svn.settings" />

这意味着SVN命令本身应该是:

<svn refid="svn.settings">//Other commands</svn>

我其实想要svnkit模式。 上面提到的库是可以的,但是我还需要添加以下内容:

org.tmatesoft.sqljet_1.1.7.r1256_v20130327_2103.jar org.tmatesoft.svnkit_1.7.9.r9659_v20130411_2103.jar

org.tigris.subversion.clientadapter.svnkit_1.7.9.2.jar

这些都可以在上面提到的subclipse下载中找到。 tmatesoft还需要:

ANTLR-3.5.2-complete.jar

从这里可以获得: Antlr