Peter, I found a problem with your solution. My build uses <antcall/> which mens the script will be executed several times.
But you can only run the script once per build process. Otherwise, beanshell fails with: [script] java.lang.reflect.InvocationTargetException: java.lang.LinkageError: trying to redefine class NameSelector (bad class loader?) [script] at java.lang.ClassLoader.defineClass0(Native Method) [script] at java.lang.ClassLoader.defineClass(ClassLoader.java:703) [script] at java.lang.ClassLoader.defineClass(ClassLoader.java:627) [script] at java.lang.reflect.Method.invoke(Native Method) [script] at bsh.Reflect.invokeOnMethod(Unknown Source) [script] at bsh.Reflect.invokeObjectMethod(Unknown Source) [script] at bsh.BshClassManager.defineClass(Unknown Source) [script] at bsh.ClassGeneratorImpl.generateClassImpl(Unknown Source) [script] at bsh.ClassGeneratorImpl.generateClass(Unknown Source) [script] at bsh.BSHClassDeclaration.eval(Unknown Source) [script] at bsh.Interpreter.eval(Unknown Source) [script] at bsh.Interpreter.eval(Unknown Source) [script] at bsh.Interpreter.eval(Unknown Source) [script] at bsh.util.BeanShellBSFEngine.eval(Unknown Source) [script] at bsh.util.BeanShellBSFEngine.exec(Unknown Source) [script] at org.apache.bsf.BSFManager$6.run(Unknown Source) [script] at java.security.AccessController.doPrivileged(Native Method) [script] at org.apache.bsf.BSFManager.exec(Unknown Source) [script] at org.apache.tools.ant.util.ScriptRunner.executeScript(ScriptRunner.java:1 30) [script] at org.apache.tools.ant.taskdefs.optional.Script.execute(Script.java:61) [script] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java(Compiled Code)) [script] at org.apache.tools.ant.Task.perform(Task.java(Compiled Code)) [script] at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:65) [script] at org.apache.tools.ant.Task.perform(Task.java(Compiled Code)) [script] at net.sf.antcontrib.logic.TryCatchTask.execute(Unknown Source) [script] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java(Compiled Code)) [script] at org.apache.tools.ant.Task.perform(Task.java(Compiled Code)) [script] at org.apache.tools.ant.Target.execute(Target.java(Compiled Code)) [script] at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:135 ) [script] at org.apache.tools.ant.ProjectHelper.configureProject(ProjectHelper.java:8 9) [script] at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:345) [script] at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:107) [script] at org.apache.tools.ant.Task.perform(Task.java(Compiled Code)) [script] at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:65) [script] at net.sf.antcontrib.logic.ForEach.executeSequential(Unknown Source) [script] at net.sf.antcontrib.logic.ForEach.execute(Unknown Source) [script] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java(Compiled Code)) [script] at org.apache.tools.ant.Task.perform(Task.java(Compiled Code)) [script] at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:65) [script] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java(Compiled Code)) [script] at org.apache.tools.ant.Task.perform(Task.java(Compiled Code)) [script] at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:3 40) [script] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java(Compiled Code)) [script] at org.apache.tools.ant.Task.perform(Task.java(Compiled Code)) [script] at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:65) [script] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java(Compiled Code)) [script] at org.apache.tools.ant.Task.perform(Task.java(Compiled Code)) [script] at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:3 40) [script] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java(Compiled Code)) [script] at org.apache.tools.ant.Task.perform(Task.java(Compiled Code)) [script] at org.apache.tools.ant.Target.execute(Target.java(Compiled Code)) [script] at org.apache.tools.ant.Target.performTasks(Target.java:328) [script] at org.apache.tools.ant.Project.executeTarget(Project.java:1215) [script] at org.apache.tools.ant.Project.executeTargets(Project.java:1063) [script] at org.apache.tools.ant.Main.runBuild(Main.java:632) [script] at org.apache.tools.ant.Main.startAnt(Main.java:183) [script] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:197) [script] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:56) I think for this to work generically, we need a way to create a disposable classloader that beanshell can use and discard if necessary. I will try to solve my problem by defining different classes each time. Jose Alberto > -----Original Message----- > From: Peter Reilly [mailto:[EMAIL PROTECTED] > Sent: 12 March 2004 13:27 > To: Ant Developers List > Subject: Re: Poor support for selectors > > > Ok, > an example! > > you can do: > <project xmlns:ac="antlib:net.sf.antcontrib"> > <script language="beanshell"> > import java.io.File; > import org.apache.tools.ant.types.selectors.FileSelector; > public class NameSelector implements FileSelector { > private String match; > public void setMatch(String match) { > this.match = match; > } > public boolean isSelected(File basedir, String > filename, File file) { > return new File(filename).name.matches(match); > } > } > project.addDataTypeDefinition("selectname", NameSelector.class); > </script> > > <ac:for param="file"> > <ac:path> > <ac:fileset dir="."> > <selectname match="^.*reg.*$"/> > </ac:fileset> > </ac:path> > <ac:sequential> > <echo>file is @{file}</echo> > </ac:sequential> > </ac:for> > </project> > > It would be a little easier using the proposed scripttypedef, > but <script> works fine as well. Peter > > Peter Reilly wrote: > > > If you use beanshell 2.0x (which you do!), you can use > > a normal script task to create a selector. > > > > Peter > > Jose Alberto Fernandez wrote: > > > >> I need to construct a fileset using rules a little bit out of the > >> ordinary and I an having a very hard time trying to do it in ANT. > >> > >> What I need is to be able to match filenames using egexp rules for > >> the filename. The only regexp things we have for selectors > looks at > >> the content of the file, > >> and the only things to select of filenames, use ANT's filename > >> expressions. > >> > >> We do not provide either a scriptselector (like we provide a script > >> filter) > >> neither. > >> Shall we try to close some of this gaps in 1.6.x? Or shall we wait > >> for 1.7 and the new role based code. > >> > >> I think one thing we should do in 1.7 is take a look at > the all the > >> core > >> features: filters, mappers, selectors, conditions, etc. > And make sure we > >> provide simillar strength across the board (by prviding > scriptXXX for > >> all) at a minimum. > >> > >> Comments? > >> > >> Jose Alberto > >> > >> > >> > >> > >> > >> > --------------------------------------------------------------------- > >> --- > >> > >> > --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [EMAIL PROTECTED] > >> For additional commands, e-mail: [EMAIL PROTECTED] > >> > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]