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

您可以从自定义Ant任务中执行Ant任务吗?,ant,Ant,我正在编写一个定制的Ant任务来处理一些业务逻辑,我想调用Ant任务 我假设我会使用executejava类,但是我很难理解它 我的方向正确吗,或者你不能用蚂蚁的方式从一个类调用另一个类吗?对于你的任务,你想调用移动任务。所以你想移动一些文件 通常,在用Java编写代码时,应该避免调用内置的Ant任务,因为它们的性能通常很差。例如,您可以使用java.io.File中的File.renameTo()方法或java.nio.File.Files中的Files.move()(仅限JDK7) 如果您确

我正在编写一个定制的Ant任务来处理一些业务逻辑,我想调用Ant任务

我假设我会使用executejava类,但是我很难理解它


我的方向正确吗,或者你不能用蚂蚁的方式从一个类调用另一个类吗?

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

  • 通常,在用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);
    }