【问题标题】:Can you execute an Ant task from within a custom Ant task?您可以从自定义 Ant 任务中执行 Ant 任务吗?
【发布时间】:2016-06-21 21:24:28
【问题描述】:

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

我想我会使用 Execute java 类,但我无法弄清楚。

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

【问题讨论】:

    标签: ant


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回复coolcfan。我选择了 File.renameTo,然后遇到了递归问题。所以我把这个逻辑移到了 ANT 中并使用了 任务。
    • 请问这个问题,但我不明白如何从 gradle 调用任务,我在 build.xml 中有“某事”任务,我想在 gradle 的文件中编写一个任务并放入在其中执行某事,我该怎么做? somthing.execute()?
    • @mautrok 我自己不知道 gradle,但使用 Java 你可以Something sth = new Something()sth.setXXX(xxx),然后是sth.execute()
    • 谢谢coolcfan,但是我找到了这个问题的答案,是的,有可能,在将xml文件导入gradle的文件后,可以在里面执行一个ant任务只需使用 task.execute() 方法创建文件,其中的任务就是您要执行的任务。
    【解决方案2】:

    上述答案没有回答原始问题“您可以从自定义 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2011-04-23
      • 2014-02-14
      • 2011-02-07
      相关资源
      最近更新 更多