2010-03-03 13 views
6

Mam zestaw plików, które pobieram w kompilacji mrówki, którą chcę podzielić na równe zbiory podrzędne.Jak podzielić zestaw plików w Ant na wiele zestawów?

Co to jest dobry prosty sposób na wykonanie tej czynności w aplikacji Ant bez dodawania niestandardowych zadań.

przykład:

fileset zawiera

TestOne.java 
TestTwo.java 
TestThree.java 
TestFour.java 
TestFive.java 
TestSix.java 

ja jak 3 zestawów plików

Fileset1

TestOne.java 
TestTwo.java 

Fileset2

TestThree.java 
TestFour.java 

Fileset3

TestFive.java 
TestSix.java 

Odpowiedz

9

Zakładając, że kolejność plików nie jest ważne, a kiedy mówisz żadnych zadań własnych nie jesteś wyjątkiem zadanie ant script, coś pochodzi z tego może być odpowiedni.

<fileset id="Fileset" dir="${basedir}" includes="Test*.java" /> 

<target name="scr"> 
    <script language="javascript"> 
    <![CDATA[ 
     // Obtain a reference to fileset in the enclosing project 
     var fileSet = project.getReference("Fileset"); 

     // Now get matching files. 
     var ds = fileSet.getDirectoryScanner(project); 
     var includes = ds.getIncludedFiles(); 

     var batchSize = 2; 
     var batch = 1; 
     for (var i = 0; i < includes.length; i += batchSize) 
     { 
      // Create a new fileset to hold the sub-Fileset. 
      var filesetN = project.createDataType("fileset"); 
      filesetN.setDir(fileSet.getDir()); 

      // Give the new Fileset an id and associate with the project. 
      project.addReference("Fileset" + batch, filesetN); 

      // Populate the sub-Fileset. 
      for (var j = 0; j < batchSize && (i + j) < includes.length; j++) 
      { 
       filesetN.setIncludes(includes[i + j]); 
      } 

      batch++; 
     } 
    ]]> 
    </script> 

    <!-- Just to illustrate. --> 
    <echo message="Set 1: ${toString:Fileset1}" /> 
    <echo message="Set 2: ${toString:Fileset2}" /> 
    <echo message="Set 3: ${toString:Fileset3}" /> 
</target> 

Biorąc pod uwagę sześć plików cytat powyższy daje:

scr: 
    [echo] Set 1: TestFive.java;TestFour.java 
    [echo] Set 2: TestOne.java;TestSix.java 
    [echo] Set 3: TestThree.java;TestTwo.java 

nie mają pochodzić z czystego mrówek drodze do osiągnięcia tego celu. Możesz wziąć pod uwagę ant-contrib, który jest dość szeroko stosowanym zestawem rozszerzeń, które obsługują pętle i właściwości zmienne.

Ostateczny komentarz, dla przykładowego zestawu można uzyskać pożądany efekt, ale nie wykracza poza trzy zestawy plików. Korzysta z first i resource collections.

<target name="reso"> 
    <first id="Fileset1" count="2"> 
     <fileset refid="Fileset" /> 
    </first> 
    <last id="Fileset3" count="2"> 
     <fileset refid="Fileset" /> 
    </last> 
    <difference id="Fileset2"> 
     <resources refid="Fileset" /> 
     <resources refid="Fileset1" /> 
     <resources refid="Fileset3" /> 
    </difference> 
</target> 
+0

Próbowałem uniknąć javascript, ale myślę, że nie ma mowy? –

+0

@John Nie można myśleć o czystym roztworze mrówki. Dodałem kilka innych pomysłów. –

+2

czekaj, możesz umieścić javascript wewnątrz skryptu ant? Co to za magia? – Hoffmann

Powiązane problemy