0

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

我想我会使用 Execute java 类,但我很难弄清楚。

我是朝着正确的方向前进,还是您不能以 Ant 的方式从另一个类调用一个类?

4

2 回答 2

0

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

  1. 一般来说,当你用 Java 编码时,你应该避免调用内置的 Ant 任务,因为它们通常性能很差。例如,您可以使用File.renameTo()方法 fromjava.io.FileFiles.move()from java.nio.file.Files(仅限 JDK7)。

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

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

于 2012-04-12T08:39:29.703 回答
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);
}
于 2012-07-27T21:13:12.040 回答