У меня есть ряд файлов, которые я беру в сборке муравья, которую я хочу разделить на равные измеренные наборы sub.
Что является хорошим простым способом сделать это у Муравья, не добавляя пользовательские задачи.
Пример:
Fileset содержит
TestOne.java
TestTwo.java
TestThree.java
TestFour.java
TestFive.java
TestSix.java
Я хотел бы 3 filesets
Fileset1
TestOne.java
TestTwo.java
Fileset2
TestThree.java
TestFour.java
Fileset3
TestFive.java
TestSix.java
Предполагая, что порядок файлов не важен, и когда вы говорите, что нет настраиваемых задач, вы не исключаете сценарий ant задача, что-то производное от этого может быть подходящим.
<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>
Учитывая шесть цитируемых вами файлов, из приведенного выше следует:
scr:
[echo] Set 1: TestFive.java;TestFour.java
[echo] Set 2: TestOne.java;TestSix.java
[echo] Set 3: TestThree.java;TestTwo.java
Я не придумал чисто муравьиного способа добиться этого. Вы можете рассмотреть ant-contrib , который представляет собой довольно широко используемый набор расширений, обслуживающих циклы и изменяемые свойства.
Заключительный комментарий, для вашего набора примеров вы можете получить желаемый эффект, но он не будет выходить за рамки трех наборов файлов. Использует первый
и последний
коллекции ресурсов .
<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>