我正在编写一个自定义 Ant 任务来处理一些业务逻辑,并且我想调用Move Ant 任务。
我想我会使用 Execute java 类,但我很难弄清楚。
我是朝着正确的方向前进,还是您不能以 Ant 的方式从另一个类调用一个类?
对于您的任务,您想调用该Move
任务。所以你想移动一些文件。
一般来说,当你用 Java 编码时,你应该避免调用内置的 Ant 任务,因为它们通常性能很差。例如,您可以使用File.renameTo()
方法 fromjava.io.File
或Files.move()
from java.nio.file.Files
(仅限 JDK7)。
如果您确实想利用一些 Ant 的东西,例如<fileset>
,您可能希望您的任务能够将Move
任务作为构建 xml 中的嵌套任务。只需将您的任务 aTaskContainer
并在其方法中进行一些过滤。
当然,您也可以只导入 Move 任务,设置所有需要的属性,然后调用它的execute()
方法。但我不喜欢那样。
上面的答案没有回答原始问题“您可以从自定义 Ant 任务中执行 Ant 任务吗?”
答案肯定是肯定的。
这是一个复制的例子。移动类似。虽然File.renameTo()
可能比调用 Ant Move 任务具有更好的性能,但您可能希望从自定义 Ant 任务中调用 Ant 任务肯定是有原因的,尤其是在不存在合适的 JRE 替代方案的情况下。Ant API 非常广泛,并提供了大量有用的任务。此外,您可能希望从不同的自定义 Ant 任务中调用自定义 Ant 任务。
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);
}