ファイルやディレクトリーのscp転送を行うオプションタスク。Ant1.6以降。
(org.apache.tools.ant.taskdefs.optional.ssh.Scp extends SSHBase)
タスク自体はオプションタスクとしてデフォルトのantに入っているが、実行には別ライブラリー(jarファイル)が必要。
Eclipse3のAntでそのままscpタスクを実行した場合、以下のような例外が発生する。
BUILD FAILED Could not create task or type of type: scp. Ant could not find the task or a class this task relies upon.
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>