> Hai Friends, > I need a help from you all. > I have two questions. > > 1. I am trying to execute set of sql files present in a > directory one by one > using foreach task. my test code is like this. How can I pass > (properties)variables defined in the other targets. > i.e ${driver}, ${durl}.... or is there any way to acheieve that?
<foreach inheritall="true" inheritrefs="true"/> > <interactive verbose="off"> > <input property ="driver" text="Database Driver" type="string" > value="oracle.jdbc.driver.OracleDriver"/> > <input property="durl" text="Driver URL" type="string" > value="jdbc:oracle:thin:@localhost:1521:orcl"/> > <input property="dbuname" text="User Name" type="string" value="cdm"/> > <input property="dbupass" text="PassWord" type="string" value="cdm"/> > </interactive> FYI: Ant contains an <input> task (1.5.3-1, maybe earlier, too). > <taskdef resource="net/sf/antcontrib/antcontrib.properties" /> > <target name="test"> > <foreach param="myparam" target="sqlrun"> > <path> > <fileset dir="D:\orac" includes="*.sql"/> > </path> > </foreach> > </target> > > <target name="sqlrun"> > <echo>Called with ${myparam}</echo> > <sql onerror="continue" driver="${driver}" url="${durl}" > userid="${dbuname}" password="${dbupass}" > > <transaction src="${myparam}"/> > </sql> > </target> Maybe faster, maybe easier (maybe wrong :-) <concat destfile="tmp.sql"> <fileset dir="D:\orac" includes="*.sql"/> </concat> <sql ... src="tmp.sql"/> <delete file="tmp.sql"/> > The echo command gives correct result, but when its trying to > execute sql > file it throws > Class Not Found: JDBC driver ${driver} could not be loaded > error. ( I am > sure, I have added neccessary jar files in the > class path) For faster tests: print all these values. > 2. My second question is can we control the order of execution, i.e by > alphatical or parent directoty > first then sub directoy and so any attributes for that is available? AFAIK you canīt. (Iīm sure, I had read a hint somewhere ... I think in DirectoryScanner ... sorry, not found). In your case you use <foreach>. Why you donīt use a file containing all the sql-file-names? sql.files ---------- test-1.sql another-test.sql subdir/foo.sql <loadfile property="sql.files" srcFile="sql.files"/> <foreach ... list="${sql.files}" delimiter="${line.separator}"/> Or you write the result of the fileset into a file and call an external sort program. Then read and use that. <fileset id="fs" dir="D:\orac" includes="*.sql"/> <pathconvert property="fs.value" refid="fs" pathsep="${line.separator}"/> <echo file="sql.files" message="${fs.value}"/> <exec .... /> <!-- sort here --> <loadfile property="sql.files" srcFile="sql.files"/> <foreach ... list="${sql.files}" delimiter="${line.separator}"/> Nothing tested, just thoughts Jan