代码之家  ›  专栏  ›  技术社区  ›  Josh

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

  •  15
  • Josh  · 技术社区  · 16 年前

    我对……感兴趣 无论如何 我可以创建一个Ant任务来从SubVersion签出文件。我“只是”想从命令行执行签出。我已经在Ant和SubVersion中使用Eclipse有一段时间了,但是我的Ant和SubVersion知识有些缺乏,因为我依赖Eclipse将它们连接在一起。

    我一直将SvnAnt视为一种解决方案,它是来自底格里斯的Subclipse的一部分 http://subclipse.tigris.org/svnant/svn.html .它可能工作得很好,但我得到的只是一些错误。对于更有经验的人来说,这可能看起来像是一个简单的蚂蚁配置问题,但我不知道这一点。我抄了那封信。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 回复  |  直到 16 年前
        1
  •  27
  •   JW.    16 年前

    如果无法让SvnAnt正常工作,则始终可以使用exec:

    <exec executable="/usr/local/bin/svn">
        <arg value="co" />
        <arg value="svn://repository/url" />
        <arg value="/destination/directory" />
    </exec>
    
        2
  •  7
  •   Wilhelm Kleu    16 年前

    从这个错误看来,在类路径上可能也需要JavaHL jar(JavaHL是Subversion API的Java语言绑定)。你是一个

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

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

        3
  •  5
  •   omermuhammed    16 年前

    让我们看看这是否对你有帮助,我复制了斯文贾瓦尔。jar,svnClientAdapter。jar和Svant。放入我的$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.

        4
  •  3
  •   Dingo    16 年前

    如果您试图让Ant使用命令行客户端,可能需要执行以下操作:

    <svn username="abc" password="123" javahl="false" svnkit="false"> 
    
        5
  •  3
  •   Simon Parker    14 年前
    1. 所有的。ANT_HOME/lib中的jar文件(和 ${user.home}/.ant/lib 和其他一些地方)是自动可用的 <typedef> 根本不需要类路径。

    2. svnant发行版尚未更新为1.7版。你仍然可以使用svnant。罐子,但你需要换掉斯文特的罐子。1.3

      svnClientAdapter.jar
      svnjavahl.jar
      

      更新版本。我从地图上提取的 subclipse 1.8发行版,甚至无需重命名:

      org.tigris.subversion.clientadapter.javahl_1.7.2.jar
      org.tigris.subversion.clientadapter_1.8.0.jar
      
        6
  •  0
  •   nasty pasty    14 年前

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

    我通过删除2个svn*解决了这个问题。jar是我在ant安装(debian上)时放在下面的

    /usr/share/ant/lib
    

    早期的。蚂蚁被多个罐子弄糊涂了。

        7
  •  0
  •   PeterS    11 年前

    我发现这一页很有帮助。对于最新版本,我发现设置svn设置的批准方式如下:

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

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

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

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

    组织。tmatesoft。sqljet_1.1.7。r1256_v20130327_2103。罐子 组织。tmatesoft。svnkit_1.7.9。r9659_v20130411_2103。罐子

    组织。底格里斯。颠覆。clientadapter。svnkit_1.7.9.2。罐子

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

    antlr-3.5.2-完成。罐子

    可从这里获得: Antlr