ビジネス ロジックを処理するカスタム Ant タスクを作成しており、 Move Ant タスクを呼び出したいと考えています。
私は Execute Java クラスを使用すると思いますが、それを理解するのに苦労しています。
私は正しい方向に進んでいますか、それとも Ant の方法であるクラスから別のクラスを呼び出すことはできませんか?
ビジネス ロジックを処理するカスタム Ant タスクを作成しており、 Move Ant タスクを呼び出したいと考えています。
私は Execute Java クラスを使用すると思いますが、それを理解するのに苦労しています。
私は正しい方向に進んでいますか、それとも Ant の方法であるクラスから別のクラスを呼び出すことはできませんか?
上記の回答は、元の質問「カスタム Ant タスク内から Ant タスクを実行できますか?」に対する回答ではありません。
答えは間違いなくイエスです。
これはコピーを使用した例です。動きも似ています。またFile.renameTo()
、Ant Move タスクを呼び出すよりもパフォーマンスが向上する可能性がありますが、カスタム Ant タスク内から Ant タスクを呼び出したい理由が明確にあり、特に適切な JRE の代替手段が存在しない場合はそうです。Ant API は非常に広範で、多数の便利なタスクを提供します。さらに、別のカスタム Ant タスク内からカスタム Ant タスクを呼び出したい場合があります。
http://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/api/org/apache/tools/ant/taskdefs/package-summary.htmlも参照してください。
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.taskdefs.Copy;
...
// set up the Strings inputPath and outputPath appropriately...
...
try{
FileSet inputSet = new FileSet(); // what to copy FROM
inputSet.setDir(new File(inputPath));
Copy copyTask = new Copy();
copyTask.setProject(getProject());
copyTask.setTodir(outputPath); // where to copy TO
copyTask.setFailOnError(true);
copyTask.addFileset(inputSet);
copyTask.execute();
}
catch(Exception e){
String msg = "Exception while invoking Copy task with inputPath=\"" + inputPath + "\" and outputPath=\"" + outputPath + "\": " + e.toString();
throw new BuildException(msg, e);
}
あなたのタスクでは、Move
タスクを呼び出したいと思います。したがって、いくつかのファイルを移動したいとします。
一般に、Java でコーディングする場合、組み込みの Ant タスクの呼び出しは避ける必要があります。これは通常、パフォーマンスが低いためです。たとえば、 fromまたはfrom のFile.renameTo()
メソッドを使用できます(JDK7 のみ)。java.io.File
Files.move()
java.nio.file.Files
のようないくつかの Ant のものを利用したい場合は、ビルド xml でネストされたタスクとしてタスク<fileset>
を取得できるようにすることができます。Move
タスクを aTaskContainer
にして、そのメソッドでフィルタリングを行うだけです。
もちろん、Move タスクをインポートし、必要なすべてのプロパティを設定して、そのexecute()
メソッドを呼び出すこともできます。しかし、私はそれが好きではありません。