「Jschを使用してファイルをコピーするにはどうすればよいですか?」最初の質問でした。Jschの使用は複雑でエラーが発生しやすく、非常に低レベルでも機能するため、単純なscpを機能させるには、いくつかの行をプログラムする必要があります。
では、 Javaで可能な限り少ないコード行でscp(またはsftp)を実装し、DRYの原則に違反しないようにするにはどうすればよいですか?
Antscpタスクで使用されるライブラリを使用できます。
package org.example.scp;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.optional.ssh.Scp;
public class ScpCopyExample {
public void downloadFile( String remoteFilePath, String localFilePath ) {
Scp scp = new Scp();
scp.setFile("username:password@host.example.org:" + remoteFilePath);
scp.setLocalTofile(localFilePath);
scp.setProject(new Project()); // prevent a NPE (Ant works with projects)
scp.setTrust(true); // workaround for not supplying known hosts file
scp.execute();
}
public static void main(String[] args) {
ScpCopyExample scpDemo = new ScpCopyExample();
scpDemo.downloadFile("~/test.txt", "testlocal.txt");
}
}
私はクラスパスで次のjarファイルを使用してこれを行いました。
この例は、ファイルをアップロードするか、代わりにSFTPを使用するように簡単に拡張できます。
できるだけ少ない行?ANT scp taskを利用するこのグルーヴィーな例を試してください。
@Grapes([
@Grab(group='org.apache.ant', module='ant-jsch', version='1.8.4'),
@GrabConfig(systemClassLoader=true)
])
def ant = new AntBuilder()
ant.scp(file:"helloworld.doc", todir:"mark@remotehost:/home/mark/docs", password:"sEcReT")
Grape アノテーションは、実行時に jar 依存関係をダウンロードします。