簡體   English   中英

顛覆與Ant整合

[英]Subversion and Ant integration

我正在運行以下方案: Ant構建Java代碼,並使用soscmd API / utility從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。 並且我建議將SvnKit指定為SvnAnt任務的svn客戶端。

SvnKit是一個純Java svn客戶端,流行的gui svn客戶端SmartSVN使用它作為基礎。 因此,如果您要編寫自己的任務,或者僅使用某些beanshell集成,則應嘗試svnkit。 只要擁有JRE,它也可用於Windows,Linux,Mac OS...。

聚苯乙烯

我曾經是SvnAnt用戶,但現在我使用自己的代碼來調用本地svn客戶端,因為我只需要使用“ svn信息”和“ svn更新”。

我使用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
}

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM