コード内から Ant のタスク (scp) の 1 つを使用したいと考えています。それを行う方法はありますか?
Ant のライブラリの 1 つを参照して、コードから直接 API を呼び出すだけでよいのでしょうか?
はい、コードからAntタスクを非常に簡単に呼び出すことができます。
Antタスクを拡張する方法の例を次に示します。
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.taskdefs.Copy;
public class MyCopyTask extends Copy {
public MyCopyTask() {
setProject(new Project());
getProject().init();
setTaskName("MyCopy");
setTaskType("MyCopy");
setOwningTarget(new Target());
}
}
コードで使用する方法は次のとおりです。
MyCopyTask copier = new MyCopyTask();
copier.setFile(srcFile);
copier.setTofile(toFile);
copier.execute();
ここにいくつかのより多くの情報があります:
OSにもよると思いRuntime.getRuntime().exec("ant deploy");
ますが、1つの固定OSで実行するだけで、必要なものを取得するのが本当に簡単で簡単な方法になります. :)
これは、Java コード内に Ant タスクを含める場合に確実に機能します。最後の手段としてこれを行ったことがあります。問題の 1 つは、Ant 固有のプロパティ (setProject など) を設定して、タスクを実際に機能させることです。これにより、使用が少し厄介になる可能性があります。さらに、言及したように、これを実行するには Ant ランタイム ライブラリが必要になる可能性があります。
私が最初に推奨するのは、Ant のオーバーヘッドなしで直接、必要な実際の SCP コードを呼び出す方法があるかどうかを確認することです。2 番目の方法は、Java SCP ライブラリを探すか、Ant scp タスクが何を使用しているかを調べることです。その他の例については、 scp via javaを参照してください。最後の推奨事項は、上記の Ant タスクを含めることです。
システムコールを呼び出す方が簡単だと思います:
try {
Runtime.getRuntime().exec("ant scpTask");
} catch (IOException e) {
e.printStackTrace();
}