代码之家  ›  专栏  ›  技术社区  ›  Ernelli

处理多个文件的Ant任务

  •  1
  • Ernelli  · 技术社区  · 15 年前

    在Ant中,我想在文件集上执行Java任务。我使用Java任务来运行RJIO,它运行JS美化器。后者的工作没有任何问题,只是使用Rhino+JS来准确地拥有一个可以工作的JS美化器/缩进器似乎有点尴尬。但是我发现的所有工作中的JS美化程序都是用JavaScript编写的。

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

    我在Ant中找不到处理文件集或类似结构的通用“foreach”任务。我在google上发现了一个附加包,它提供了“foreach”,但是由于它不是标准的Ant核心任务的一部分,所以我觉得我走错了方向。

    exec任务可以迭代文件集,但我希望在JVM内部或至少在分叉的JVM上运行Rhino。但作为最后的手段,当然可以在外部执行Java,MayBee是首选的方式。

    2 回复  |  直到 12 年前
        1
  •  3
  •   Alexander Pogrebnyak    15 年前

    答案是 ant-contrib .

    明确地 foreach 任务

        2
  •  1
  •   Community noseratio    7 年前

    从我的回答 https://stackoverflow.com/a/9715078/438319 这里有一种使用javascript和ant scriptdef任务的方法,因为scriptdef是一个核心的ant t任务,所以您不需要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>