Antによる構築コミットの自動更新


最近、会社は毎日1つのバージョンを構築してSVNサーバーに提出する必要があるので、定時タスクを書きたいと思って、毎日定時に自動的に完成します.大体の構想はAntを利用して、まずコードを更新して、それからパッケージをコンパイルして、最後にパッケージファイルをSVNサーバーに提出します.ここでコンパイルおよびパッケージングタスクはAntが提供するタスクで完了することができるが,SVNの更新とコミットにはSVNクライアント機能の統合が必要である.
ここではSVNKitによる実装方法を紹介する.SVNKitは純JavaのSVNクライアントライブラリであり、SVNKitを使用してSVNのクライアントをインストールする必要がなく、各種のオペレーティングシステムをサポートする.1.準備
(1)ダウンロードインストールAnt,Antダウンロードアドレス:http://www.apache.org/dist/ant/binaries/apache-ant-1.8.2-bin.zip.ダウンロードが完了したら、インストールする必要はありません.圧縮パッケージをCディスクルートディレクトリなどの指定されたディレクトリに解凍するだけです.次に環境変数ANT_を設定HOME=C:\apache-ant-1.8.2,%ANT_HOME%BINをPath変数に追加します.
(2)SVNKitをダウンロードし、ダウンロード後解凍し、svnkit.JArとsvnkit-cli.JArファイルは、D:buildなどの構築ディレクトリの下のサブディレクトリantlibディレクトリにコピーされます.
2.build.xmlファイル
<?xml version="1.0" encoding="gb2312"?>
<project basedir="." name="myProject" default="svnCommit">
  <!--        -->
  <property name="dir.build" value="${basedir}\myProject"/>
  <property name="dir.src" value="${dir.build}\src"/>
  <property name="dir.web" value="${dir.build}\WebRoot"/>
  <property name="dir.lib" value="${dir.web}\WEB-INF\lib"/>
  <property name="dir.classes" value="${dir.web}\WEB-INF\classes" />
  
  <!-- SVN     -->
  <property name="svn.repository" value="http://svn.xxx.com/dev/myProject"/>
  <property name="svn.source" value="D:\"/>
  <property name="svn.username" value="username" />
  <property name="svn.password" value="password" />
  
  <!--      -->
  <tstamp prefix="myProject.">
    <format property="TimeSign" pattern="yyyyMMdd"/>
  </tstamp>

  <!--   lib   -->
  <path id="applib">
    <fileset dir="${dir.lib}">
      <include name="**/*.jar"/>
    </fileset>
  </path>

  <!-- SVNKit   lib -->
  <path id="antlib">
    <fileset dir="${basedir}/antlib">
      <include name="**/*.jar"/>
    </fileset>
  </path>
  
  <!-- SVN      (     ,      ) -->
  <target name="svnCheckout">
    <echo message="      ,  Checkout"/>
    <delete dir="${dir.build}" />
    
    <echo message="Checkout    "/>
    <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true">
      <arg value="checkout"/>
      <arg value="--username"/>
      <arg value="${svn.username}"/>
      <arg value="--password"/>
      <arg value="${svn.password}"/>
      <arg value="${svn.repository}/myProject"/>
      <classpath refid="antlib" />
    </java>
  </target>
  
  <!-- SVN       -->
  <target name="svnUpdate" depends="prepare">
    <echo message="    "/>
    <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true">
      <arg value="update"/>
      <arg value="--username"/>
      <arg value="${svn.username}"/>
      <arg value="--password"/>
      <arg value="${svn.password}"/>
      <arg value="${dir.build}"/>
      <classpath refid="antlib" />
    </java>
  </target>
  
  <!--   classes  ,         -->
  <target name="prepare">
    <delete dir="${dir.classes}" />
  </target>

  <!--        -->
  <target name="build" depends="svnUpdate,prepare">
    <echo message="  Java  "/>
    <javac destdir="${dir.classes}" srcdir="${dir.src}" target="1.5" excludes="**/.svn/**">
      <classpath refid="applib"/>
    </javac>
    <echo message="      "/>
    <copy todir="${dir.classes}" preservelastmodified="true">
      <fileset dir="${dir.src}">
        <include name="**/*.properties"/>
        <include name="**/*.xml"/>
      </fileset>
    </copy>
  </target>

  <!--    -->
  <target name="makewar" depends="build">
    <war destfile="${svn.source}/myProject${myProject.TimeSign}.war" basedir="${dir.web}"/>
  </target>
  
  <!--    ,    SVN    -->
  <target name="svnCommit" depends="makewar">
    <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true">
      <arg value="add"/>
      <arg value="--username"/>
      <arg value="${svn.username}"/>
      <arg value="--password"/>
      <arg value="${svn.password}"/>
      <arg value="${svn.source}\myProject${myProject.TimeSign}.war"/>
      <classpath refid="antlib" />
    </java>
    <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true">
      <arg value="commit"/>
      <arg value="--username"/>
      <arg value="${svn.username}"/>
      <arg value="--password"/>
      <arg value="${svn.password}"/>
      <arg value="-m"/>
      <arg value='"daily build"'/>
      <arg value="${svn.source}\myProject${myProject.TimeSign}.war"/>
      <classpath refid="antlib" />
    </java>
  </target>
</project>

説明:具体的なbuild.xmlファイルの書き方は、詳細はAntが持参した関連ドキュメントを参照してください
3.バッチファイルbuildを作成する.bat
ant -f D:\build\build.xml
説明:ここでは絶対アドレスを使用します.タイミングタスク呼び出しを容易にするためです.
4.build.batがWindowsに追加したタスク計画は、大きな成果を収めた.
注意:コンパイル時にクラスHttpServertRequestなどの類似の問題が見つからない場合は、jsp-apiを必要とする.JArとservlet-api.JArファイルをclasspathに追加