您可以从自定义Ant任务中执行Ant任务吗?
我正在编写一个定制的Ant任务来处理一些业务逻辑,我想调用Ant任务 我假设我会使用executejava类,但是我很难理解它您可以从自定义Ant任务中执行Ant任务吗?,ant,Ant,我正在编写一个定制的Ant任务来处理一些业务逻辑,我想调用Ant任务 我假设我会使用executejava类,但是我很难理解它 我的方向正确吗,或者你不能用蚂蚁的方式从一个类调用另一个类吗?对于你的任务,你想调用移动任务。所以你想移动一些文件 通常,在用Java编写代码时,应该避免调用内置的Ant任务,因为它们的性能通常很差。例如,您可以使用java.io.File中的File.renameTo()方法或java.nio.File.Files中的Files.move()(仅限JDK7) 如果您确
我的方向正确吗,或者你不能用蚂蚁的方式从一个类调用另一个类吗?对于你的任务,你想调用
移动任务。所以你想移动一些文件
通常,在用Java编写代码时,应该避免调用内置的Ant任务,因为它们的性能通常很差。例如,您可以使用java.io.File
中的File.renameTo()
方法或java.nio.File.Files中的Files.move()
(仅限JDK7)
如果您确实希望利用一些Ant功能,例如
,那么您可能希望您的任务能够将移动
任务作为构建xml中的嵌套任务。只需将您的任务设置为TaskContainer
,并在其方法中进行一些筛选
当然,您也可以导入Move任务,设置所有需要的属性,并调用其execute()
方法。但我不喜欢这样
上面的答案并没有回答最初的问题“您可以从自定义Ant任务中执行Ant任务吗?”
答案肯定是肯定的
下面是一个复制的例子。这一举动也很相似。虽然File.renameTo()
可能比调用Ant Move任务有更好的性能,但您可能希望从自定义Ant任务中调用Ant任务的原因是肯定的,特别是在没有合适的JRE替代方案的情况下。AntAPI非常广泛,提供了大量有用的任务。此外,您可能希望从不同的自定义Ant任务中调用自定义Ant任务
另见
谢谢你的回复。我使用File.renameTo,然后遇到了递归问题。所以我把这个逻辑转移到ANT中并使用了这个任务。对不起,我不知道如何从gradle调用任务,我在build.xml中有“something”任务,我想在gradle的文件中编写一个任务,并在其中执行某个任务,我该怎么做?somthing.execute()?@mautrok本人不认识gradle,但用Java你可以Something sth=new sth()
,然后sth.setXXX(xxx)
,然后sth.execute()
。谢谢你,coolcfan,但我已经找到了这个问题的答案,是的,在将xml文件导入gradle的文件之后,只需使用task.execute()方法即可在该文件中执行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);
}