Subversion和Ant的集成



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

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

一旦你得到了想要的东西,这些细节可能会帮助你。

我通常做的是从提取中抓取以下jar:

  1. svnant.jar
  2. svnClientAdapter.jar
  3. svnjavahl.jar

并将它们添加到我的项目中的一个文件夹中,该文件夹不部署(即-它们仅用于构建,而不是运行时)。

然后在我的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。我不知道为什么会这样。很遗憾,我现在没有时间调查。

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

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

公立小学

我曾经是SvnAnt用户,但现在我使用自己的代码调用本地svn客户端,因为我只需要使用"svn info"one_answers"svn update"。

我使用exec调用本地Linux svn客户端来更新主干:

<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
}

相关内容

  • 没有找到相关文章

最新更新