Dateien lassen sich in Ant (auch rekursiv) mit fileset finden. Allerdings kann man mit Bordmitteln nicht pro gefundenem File einen antcall absetzen. Das Internet schlägt Ant-Contrib vor, da gibt es “for” und “foreach”, aber das zum Laufen zu bekommen bin ich gerade zu blöd. Warum liefern die ihr ant-contrib-<version>.jar nicht mit aus??
Egal. Was mit Bordmitteln geht, ist Javascript (Danke, Björn!). Dann kann man Dateien mit JS auslesen, und an antcall übergeben. Zusammen sieht das so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<target name="_handle logging"> <script language="javascript"> <![CDATA[ importClass(java.io.File); // read files from ${project.dir} dir = project.getProperty("project.dir"); fs = project.createDataType("fileset"); fs.setDir( new File( dir ) ); fs.setIncludes( "**/log4j.xml" ); // iterate files: srcFiles = fs.getDirectoryScanner( project ).getIncludedFiles( ); for ( i = 0; i < srcFiles.length; i++ ) { // create antcall task, pass current file, execute: antcall = project.createTask("antcall"); antcall.init(); antcall.setTarget("handle log4j.xml"); param = antcall.createParam(); param.setName("file"); param.setValue(srcFiles[i]); antcall.execute(); } ]]> </script> </target> <target name="handle log4j.xml"> <echo message="processing file ${file}..." /> <!-- ... --> </target> |