如何在Ant中将文件集拆分为多个集
我在ant构建中收集了一组文件,我希望将其拆分为大小相等的子集 在Ant中,不添加自定义任务的简单方法是什么 例如: 文件集包含如何在Ant中将文件集拆分为多个集,ant,split,fileset,Ant,Split,Fileset,我在ant构建中收集了一组文件,我希望将其拆分为大小相等的子集 在Ant中,不添加自定义任务的简单方法是什么 例如: 文件集包含 TestOne.java TestTwo.java TestThree.java TestFour.java TestFive.java TestSix.java 我想要3个文件集 文件集1 TestOne.java TestTwo.java 文件集2 TestThree.java TestFour.java 文件集3 TestFive.java TestSix
TestOne.java
TestTwo.java
TestThree.java
TestFour.java
TestFive.java
TestSix.java
我想要3个文件集
文件集1
TestOne.java
TestTwo.java
文件集2
TestThree.java
TestFour.java
文件集3
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>
我还没有想出一个纯粹的蚂蚁方法来实现这一点。您可能会考虑这是一个相当广泛使用的扩展集,适合于循环和可变属性。
最后一点,对于示例集,您可以获得所需的效果,但它不会扩展到三个文件集之外。使用第一个
和最后一个
我试图避免使用javascript,但我想没有办法?@John想不出一个纯粹的ant解决方案。添加了一些其他想法。等等,您可以将javascript放在ant脚本中吗?这是什么魔法?
scr:
[echo] Set 1: TestFive.java;TestFour.java
[echo] Set 2: TestOne.java;TestSix.java
[echo] Set 3: TestThree.java;TestTwo.java
<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>