处理多个文件的Ant任务

时间:2009-12-22 16:23:05

标签: java ant exec loops

在Ant中

我想在文件集上执行Java任务。我使用Java任务来运行运行JS美化器的rhino。后来的工作没有任何问题,除了使用rhino + js实际上有一个工作的JS美化/压头可能看起来有点尴尬。但是我发现的所有正在使用的JS美化器都是用JavaScript编写的。

我也想在文件上运行jsmin,但是作为分发任务的一部分。因此,同样的问题将再次出现,例如在多个文件上运行java任务。 jsmin的java / JS实现是首选,因为它适用于运行ant的所有平台。

我无法在ant中找到处理文件集或类似结构的通用“foreach”任务。我用Google搜索了一个附加软件包,它提供了“foreach”,但由于它不是标准蚂蚁核心任务的一部分,我感觉自己走错了路。

exec任务可以遍历文件集,但我想在JVM中运行rhino,或者至少在分叉的JVM上运行。但作为最后的手段,当然可以在外部执行java,也许这是首选方式。

2 个答案:

答案 0 :(得分:3)

答案是ant-contrib

特别是foreach任务

答案 1 :(得分:1)

我在https://stackoverflow.com/a/9715078/438319的回答 这是使用javascript和ant scriptdef任务执行此操作的方法,因为scriptdef是核心ant任务,所以您不需要ant-contrib来使用此代码。

<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>