Subversion和Ant集成

时间:2011-12-16 11:14:20

标签: svn version-control ant

我正在运行以下方案: Ant 进行java代码构建并使用 soscmd API /实用程序从 SourceSafe 系统中检索源代码。我知道他们紧密结合在一起。我正在使用的Ant版本是1.6。因此该版本不支持Subversion。我的subversion服务器作为服务在远程计算机上运行,​​我希望Ant能够使用 Subversion 检索源。我该怎么做?

3 个答案:

答案 0 :(得分:5)

使用此处提供的SvnAnt任务 - http://subclipse.tigris.org/svnant.html

答案 1 :(得分:3)

一旦你得到了svnant的东西,这些细节可能会帮助你完成剩下的工作。

我通常做的是从提取中获取以下JAR:

  1. svnant.jar
  2. svnClientAdapter.jar
  3. svnjavahl.jar
  4. 并将它们添加到项目中的文件夹中 not 部署(即 - 它们只是由构建使用,而不是运行时)。

    然后在我的ANT脚本中添加:

    <path id="svntask.classpath">
        <fileset dir="nonruntime_lib/svn">
            <include name="*.jar"/>
        </fileset>
    </path>
    

    然后:

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

    然后允许我添加任务调用,如:

    <!-- svn export the web root & java -->
    <svn>
        <export srcUrl="http://your.svn/web" destPath="dist/web"/>
        <export srcUrl="http://your.svn/src" destPath="tmp/src"/>
    </svn>
    

    不确定您是否需要所有这些JAR,但“它们适合我”。祝你好运,随时回复其他问题/场景。

    修改

    我不确定这是否适用于Subversion 1.7(我正在运行1.6)。

    好的,所以这只是一个部分解决方案。出于某种原因,我需要确保除了上面的注释之外还安装了SilkSVN。我不知道为什么会这样。不幸的是,我现在没有时间进行调查。

答案 2 :(得分:1)

正如下面的两个答案所提到的,你可以使用SvnAnt;我建议将SvnKit指定为SvnAnt任务的svn客户端。

SvnKit是一个纯java svn客户端,它被流行的gui svn客户端SmartSVN用作基础。因此,如果您想编写自己的任务,或者只是使用一些beanshell集成,您应该尝试使用svnkit。它也可用于Windows,Linux,Mac OS ......只要你有JRE。

P.S。

我曾经是SvnAnt用户,但现在我使用自己的代码来调用本机svn客户端,因为我只需要使用“svn info”和“svn update”。

我使用exec调用本机Linux svn客户端来更新trunk:

<exec executable="svn" dir="${trunk.dir}" failonerror="true">
    <arg line="update -r ${to.rev} --username ${trunk.user} --password ${trunk.passwd} --depth infinity" />
</exec>

我使用流程构建器来调用“svn info”并从输出中获取实际的修订版号(自定义ant任务):

//java code for ant task
public void execute() throws BuildException {
    //varible verifying codes ignored......
    ProcessBuilder pb = new ProcessBuilder("svn","info");
    //The native "svn" client doesn't support symbol link, so run it in the directory instead of specifying the directory as svn info's parameter.
    pb.directory(_dirToTrunk);
    //Make sure the output is English.
    Map<String, String> env = pb.environment();
    env.put("LANGUAGE","en_US.UTF-8:en");
    Process p = null;
    try {   
        p = pb.start();
        //then get the output and parse the svn revision number.
    }
    //catch codes ignored
}

希望这会有所帮助。