S-JIS[2008-12-02/2011-07-17] 変更履歴

Ant:scp

ファイルやディレクトリーのscp転送を行うオプションタスク。Ant1.6以降。
(org.apache.tools.ant.taskdefs.optional.ssh.Scp extends SSHBase)
タスク自体はオプションタスクとしてデフォルトのantに入っているが、実行には別ライブラリー(jarファイル)が必要。


インストール(Eclipse向け)

Eclipse3のAntでそのままscpタスクを実行した場合、以下のような例外が発生する。

Eclipse3.2(Ant1.6):

BUILD FAILED
Could not create task or type of type: scp.

Ant could not find the task or a class this task relies upon.

Eclipse3.4(Ant1.7):

BUILD FAILED
Problem: failed to create task or type scp
Cause: Could not load a dependent class com/jcraft/jsch/UserInfo

Ant1.6のメッセージだと原因はよく分からないが、Ant1.7だと、依存しているクラス(com.jcraft.jsch.UserInfo)がロードできない為だと分かる。

jschのjarファイルをAntのクラスパスに追加しておく必要がある。
Eclipse3.2の場合、C:\eclipse\plugins\com.jcraft.jsch_0.1.28.jar
Eclipse3.4の場合、C:\eclipse\plugins\com.jcraft.jsch_0.1.37.v200803061811.jar
Eclipse3.6の場合、C:\eclipse\plugins\com.jcraft.jsch_0.1.41.v200903070017.jar [2011-07-17]

なお、scpタスクのクラス自体(org.apache.tools.ant.taskdefs.optional.ssh.Scp)はC:\eclipse\plugins\org.apache.ant_〜\lib\ant-jsch.jarにある。
(ant-jsch.jarだけでは実行(とScpクラスを使ったソースのコンパイル)に必要なクラスが足りない)

参考: @IT会議室のAnt : SSH,SCPタスクが使えない


属性

属性 説明 備考
file="URI" 転送元のファイルを指定する。 @が入っていればリモートと判断される。
todir="URI" 転送先のディレクトリーを指定する。 @が入っていればリモートと判断される。
password="パスワード" URIの中でパスワードを指定しない場合、この属性でパスワードを指定する。  
trust="yes" scp(ssh)では、接続先のホストを“信頼できるホストの一覧”に登録しておく必要がある。
trustをyesにすると、その一覧に無くても接続する。デフォルトはno。
 
localFile="ファイル" ローカルからリモートへファイル転送する際の、転送元ファイルを指定する。 Ant1.6.2以降。fileの代替。
remoteTodir="URI" ローカルからリモートへファイル転送する際の、転送先ディレクトリーを指定する。 Ant1.6.2以降。todirの代替。
remoteFile="URI" リモートからローカルへファイル転送する際の、転送元ファイルを指定する。 Ant1.6.2以降。fileの代替。
localTodir="ディレクトリー" リモートからローカルへファイル転送する際の、転送先ディレクトリーを指定する。 Ant1.6.2以降。todirの代替。

参考: スタックアスタリスクのAnt徹底活用第4回:システム開発によく使うタスク(2)


ファイルを送信する例

ローカルにあるtest.txtをリモートのデフォルトの場所に送信する例。

	<property name="scp.user" value="user" />
	<property name="scp.pass" value="password" />
	<property name="scp.server" value="localhost" />

	<target name="scp_put">
		<scp file="test.txt" todir="${scp.user}:${scp.pass}@${scp.server}:." trust="yes" />
	</target>
	<target name="scp_put">
		<scp file="test.txt" todir="${scp.user}@${scp.server}:." password="${scp.pass}" trust="yes" />
	</target>

複数のファイルを転送する例。

	<target name="scp_puts">
		<scp todir="${scp.user}:${scp.pass}@${scp.server}:." trust="yes">
			<!-- ローカルのsrcの下の全javaファイルを転送 -->
			<fileset dir="src">
				<include name="**/*.java" />
			</fileset>
		</scp>
	</target>

ファイルを受信する例

リモートにあるindex.htmlをローカルに転送してくる例。

	<target name="scp_get">
		<scp file="${scp.user}:${scp.pass}@${scp.server}:./index.html" todir="html_dir" trust="yes" />
	</target>

ディレクトリーごと全部転送してくるには、ファイル名の位置に「*」を指定する。

	<target name="scp_gets">
		<scp file="${scp.user}:${scp.pass}@${scp.server}:tech/*" todir="html_dir" trust="yes" />
	</target>

Ant目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま