Partendo dal presupposto che l'ordine dei file non è importante, e quando si dice no attività personalizzate non si è escluso il compito formica script, qualcosa di deriva da questo potrebbe essere adatto.
<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>
Dato i file sei tu citi, quanto sopra dà:
scr:
[echo] Set 1: TestFive.java;TestFour.java
[echo] Set 2: TestOne.java;TestSix.java
[echo] Set 3: TestThree.java;TestTwo.java
io non sono venuto con un modo formica pura per raggiungere questo obiettivo. Potresti considerare ant-contrib che è un insieme di estensioni ampiamente utilizzato che si adatta alle proprietà di loop e mutabili.
Commento finale, per il set di esempio è possibile ottenere l'effetto desiderato, ma non si estende oltre tre set di file. Utilizza first
e last
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>
fonte
2010-03-04 22:55:52
Stavo cercando di evitare il javascript, ma immagino che non ci sia modo? –
@John Non riesco a pensare a una soluzione di pura formica. Ho aggiunto un paio di altre idee. –
wait, puoi inserire javascript all'interno di uno script ant? Che tipo di stregoneria è questa? – Hoffmann