2011-06-30 44 views
3

Ant腳本我有以下的Ant構建目標:與嵌入的JavaScript試圖讀取文件

<target name="analyze"> 
    <script language="javascript"> 
    <![CDATA[ 
      importPackage(java.lang); 
      var path = project.getProperty("PROJECT_HOME") + "/oms"; 
      System.out.println("path = " +path);     
     ]]> 
    ]]> 
    </script> 
</target> 

我想遞歸。如果他們中找到目錄中的所有文件。 java將它們打印出來。這可能嗎?

回答

10

在Ant script task docs中有一個例子,基本上是這樣做的。這是一個簡化版本:

<script language="javascript"> 
<![CDATA[ 
    importClass(java.io.File); 

    fs = project.createDataType("fileset"); 
    dir = "src"; 
    fs.setDir(new File(dir)); 
    fs.setIncludes("**/*.java"); 

    // create echo Task via Ant API 
    echo = project.createTask("echo"); 

    // iterate over files found. 
    srcFiles = fs.getDirectoryScanner(project).getIncludedFiles(); 
    for (i = 0; i < srcFiles.length; i++) { 
     var filename = srcFiles[i]; 

     // use echo Task via Ant API 
     echo.setMessage(filename); 
     echo.perform(); 
    }]]> 
</script> 

這使用Ant FileSet來查找文件。這裏在文件集上設置了包含規則,以便只有.java找到的文件由迭代器返回 - 使用文件名上的字符串操作保存以放棄任何其他文件。

如果您需要設置排除規則,您可以通過FileSet類的setExcludes()方法(實際上是AbstractFileset類)來設置排除規則。 請參閱docs for patterns以瞭解有關Ant通配符的更多信息。

+0

馬丁,那輝煌謝謝! –

+0

如果我想排除目錄中的文件,我該怎麼做? –

+0

@Amir - 我添加了一個關於排除的註釋。 –

4

你也可以做到這一點與核心Ant任務,而無需使用javascript:

<fileset dir="java" id="java.files.ref"> 
    <include name="**/*.java"/> 
    </fileset> 
    <pathconvert pathsep="${line.separator}" property="java.files" refid="java.files.ref"/> 
    <echo>${java.files}</echo> 
+0

很高興知道,+1! –