您可以在自定义Ant任务中执行Ant任务吗?

时间:2012-04-12 06:44:24

标签: ant

我正在编写一个自定义Ant任务来处理一些业务逻辑,我想调用Move Ant任务。

我认为我会使用Execute java类,但我无法搞清楚。

我是朝着正确的方向前进,还是你不能以蚂蚁的方式从另一个班级召集一个班级?

2 个答案:

答案 0 :(得分:0)

对于您的任务,您想要调用Move任务。所以你想要移动一些文件。

  1. 通常,当您使用Java进行编码时,应避免调用内置Ant任务,因为它们通常性能较差。例如,您可以使用File.renameTo()中的java.io.File方法或Files.move()中的java.nio.file.Files(仅限JDK7)。

  2. 如果你想利用某些Ant,比如<fileset>,你可能希望你的任务能够将Move任务作为构建xml中的嵌套任务。只需将您的任务设为TaskContainer并在其方法中进行一些过滤。

  3. 当然,您也可以导入Move任务,设置所有需要的属性,并调用其execute()方法。但我不喜欢这样。

答案 1 :(得分:0)

上述答案没有回答原始问题“你能在自定义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);
}