用于处理多个文件的Ant任务(Ant task that processes multiple fi

2019-10-18 19:22发布

在蚂蚁我想在一个文件集执行Java任务。 我使用Java任务运行运行在JS美化犀牛。 后来的作品没有任何问题,但它似乎有点别扭使用犀牛+ JS来实际上可以有一个工作的JS美化/压头。 但我发现所有的工作JS美化都是用JavaScript编写的。

我也想上的文件运行jsmin为好,但作为分发任务的一部分。 所以,同样的问题会再次出现,例如在多个文件中运行的Java任务。 最好在Java / JS实现jsmin的,因为它的工作原理在运行蚂蚁的所有平台。

我无法找到蚂蚁一般“的foreach”任务处理集或类似的结构。 我用Google搜索蚂蚁发现了一个附加软件包,提供“的foreach”,但因为它不是标准蚂蚁核心任务的一部分给我的感觉是我'在错误的轨道上。

Exec任务可以遍历一个文件集,但我想运行在JVM内部或至少在一个分叉JVM犀牛。 但是,作为最后的手段,当然可以从外部exec的爪哇,梅比认为是首选的方式。

Answer 1:

答案是蚂蚁的contrib 。

具体的foreach任务



Answer 2:

从我在回答https://stackoverflow.com/a/9715078/438319这里有办法做到这一点使用JavaScript和蚂蚁scriptdef任务,你不需要蚂蚁的contrib这个代码,因为scriptdef工作是一个核心的蚂蚁任务。

<scriptdef name="bzip2-files" language="javascript">
<element name="fileset" type="fileset"/>
<![CDATA[
  importClass(java.io.File);
  filesets = elements.get("fileset");

  for (i = 0; i < filesets.size(); ++i) {
    fileset = filesets.get(i);
    scanner = fileset.getDirectoryScanner(project);
    scanner.scan();
    files = scanner.getIncludedFiles();
    for( j=0; j < files.length; j++) {

        var basedir  = fileset.getDir(project);
        var filename = files[j];
        var src = new File(basedir, filename);
        var dest= new File(basedir, filename + ".bz2");

        bzip2 = self.project.createTask("bzip2");        
        bzip2.setSrc( src);
        bzip2.setDestfile(dest ); 
        bzip2.execute();
    }
  }
]]>
</scriptdef>

<bzip2-files>
    <fileset id="test" dir="upstream/classpath/jars/development">
            <include name="**/*.jar" />
    </fileset>
</bzip2-files>


文章来源: Ant task that processes multiple files