2009-12-22 95 views
1

Ant我想在文件集上执行Java任务。我使用Java任务来运行运行JS美化程序的犀牛。后面的工作没有任何问题,除了使用rhino + js来实现一个可用的JS美化器/压头似乎有些尴尬。但是我发现的所有可用的JS美化工都是用JavaScript编写的。处理多个文件的Ant任务

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

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

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

回答

3

答案是ant-contrib

具体foreach任务

+0

好吧,我发现下的ant.apache.org“相关项目”中列出的,所以我认为这是一个非常标准的插件,所以我会选择这种解决方案蚂蚁的contrib。 – Ernelli 2009-12-22 18:52:04

1

从我在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>