2011-12-16 67 views
1

我运行了以下方案:蚂蚁使得Java代码生成和使用soscmd API /工具,它检索从的SourceSafe系统资源。我知道他们是紧密结合的。我使用的Ant版本是1.6。因此,该版本不支持Subversion。我的Subversion服务器作为服务运行在远程机器上,我希望Ant能够使用Subversion检索源文件。我会怎么做?Subversion和Ant集成

回答

4

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

+0

是否与Subversion 1.7版本兼容? – lexeme 2011-12-16 14:32:12

+0

SvnAnt的一个问题是...如果使用本地客户端,它将不支持符号链接,因为本地客户端不支持它。 – coolcfan 2011-12-19 08:38:36

3

一旦你得到了svnant的东西,这些细节可以帮助你的方式休息。

我最常做的是从提取抢以下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> 

不知道如果你需要所有那些JARs,但是“他们为我工作”。祝你好运,并随时回复其他问题/情况。

编辑

我不知道这是否与Subversion 1.7(我跑1.6)。

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

1

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

SvnKit是哪个OS所使用的流行的GUI svn客户端的SmartSVN作为碱纯Java svn客户端。所以如果你想写自己的任务,或者只是使用一些beanshell集成,你应该尝试svnkit。它也可用于Windows,Linux,Mac OS ...只要你有JRE。

P.S.

我曾经是一个SvnAnt用户,但现在我使用自己的代码来调用本地svn客户端,因为我只需要使用“svn info”和“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信息”,并从输出获得的实际版本号(一个定制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 
} 

希望这会有所帮助。