AntでFTPとSCPを実行

Antのタスクで「FTP」と「SCP」のタスクを組んでみる。

FTP

<!-- ================================= 
          target: ftp.send              
         ================================= -->
<target name="ftp.send">
	<antcall target="ftp">
		<param name="server.send.dir" value="lib" />
		<param name="binary" value="yes" />
		<param name="local.send.dir" value="lib" />
		<param name="local.send.include.name" value="*.jar" />
	</antcall>

	<antcall target="ftp">
		<param name="server.send.dir" value="conf" />
		<param name="binary" value="no" />
		<param name="local.send.dir" value="conf" />
		<param name="local.send.include.name" value="*.xml" />
	</antcall>
</target>

<!-- ================================= 
      target: ftp                      
     ================================= -->
<target name="ftp">
	<ftp server="${サーバー名}" 
             userid="${ユーザーID}" 
             password="${パスワード}" 
             remotedir="${リモート転送先ディレクトリ}/${server.send.dir}" 
             verbose="yes" 
             chmod="775" 
             depends="yes" 
             binary="${binary}">
		<fileset dir="${local.send.dir}">
			<include name="${local.send.include.name}" />
		</fileset>
	</ftp>
</target>

SCP

<!-- ================================= 
          target: scp.send              
         ================================= -->
<target name="scp.send">

	<antcall target="scp">
		<param name="server.send.dir" value="conf" />
		<param name="local.send.dir" value="conf" />
		<param name="local.send.include.name" value="*.xml" />
		
	</antcall>
	<antcall target="scp">
		<param name="server.send.dir" value="lib" />
		<param name="local.send.dir" value="lib" />
		<param name="local.send.include.name" value="*.jar" />
	</antcall>	
</target>

<!-- ================================= 
      target: scp                     
     ================================= -->
<target name="scp">
	<scp todir="${ユーザーID}:${パスワード}@${サーバー名}:${リモート転送先ディレクトリ}/${server.send.dir}"
             trust="true" 
             verbose="true">
		<fileset dir="${local.send.dir}">
			<include name="${local.send.include.name}" />
		</fileset>
	</scp>
</target>

感想としては「FTP」の方がオプションの「chmod」で
転送しながらファイルのパーミッションを変更出来るし、
「depends(or newer)」で新規か、変更されたファイルのみ転送できるのもいい。
scpを使うとsshを使った安全なファイルのやり取りができます。


ftpやscpタスクはオプショナルタスクですので、
使用するにはデフォルトのままでは使用することはできません。
別途jarファイルを$ANT_HOME\libに配置する必要があります

ftpに必要なjarファイル commons-net-2.0.jar

Apache Download Mirrors

scpに必要なjarファイル jsch-0.1.41.jar

JSch - Java Secure Channel
2009年4月4日時点

リファレンス

Apache Ant™ User Manual


毎年この季節の変わり目に風邪ひいてしまう・・・