2011-12-16 68 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 
} 

希望這會有所幫助。