2009-12-22 110 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>