On 9/28/07, Dominique Devienne <[EMAIL PROTECTED]> wrote: > On 9/28/07, Anil VVNN <[EMAIL PROTECTED]> wrote: > > I'm trying to use "OutOfDate" task for the following requirement,[...] > > <targetfiles> > > <pathelement path="${xjc.java.dir}"/> > > </targetfiles> > > [...] > > But generate.xjc.java is called always (no matter whether there is a change > > to XSD's or not). > > Could be that your "target files" should be all the generated files > inside xjc.java.dir, instead of (or in addition to) just xjc.java.dir. > If any target file is older than any source file, the sequential will > fire. Could be you only need a <touch> on xjc.java.dir in the > sequential too. > > The problem with this approach is that the sequential will no fire for > missing generated files, and to deal with this, you either need to use > <filelist> in targetfiles, if you know the generated file names > (possibly via a mapper and the input sources), or write a custom task > that records all generated files after each sequential, so test > they're all here and up-to-date on the next run (what I did in my > <jaxb> task in BugZilla). --DD
The targetfile in this case is just the top-level directory, which may not get updated each time - so it is always out-of-date. However, you do not need to use <outofdate> for the xjc ant task as it has its own dependecy check, if it is configured. This is the <macro> I used: <!-- Macro: compile-xsd --> <macrodef name="compile-xsd"> <attribute name="xsd"/> <attribute name="package" default="@{xsd}"/> <sequential> <xjc schema="${main.dir}/schema/@{xsd}.xsd" destdir="${gen.java}" package="[EMAIL PROTECTED]" extension="yes" > <produces dir="${gen.java}/com/COMPANY/presence/xsd/@{package}" includes="**/*.java"/> </xjc> </sequential> </macrodef> (Note the produces nested element). and use: <target name="compile-xsd"> <mkdir dir="${gen.java}"/> <compile-xsd xsd="data-model" package="datamodel"/> <compile-xsd xsd="pidf"/> <compile-xsd xsd="rpidf"/> </target> Another technique to use with <outofdate> is to pick a file that *always* gets updated (given the particular input) when a 3-party ant task is used. For example: <macrodef name="gen-java-from-wsdl"> <attribute name="wsdl" description="s"/> <attribute name="targetfile"/> <attribute name="package"/> <sequential> <ac:outofdate> <sourcefiles path="@{wsdl}"/> <targetfiles path="@{targetfile}"/> <sequential> <axis-wsdl2java output="build/gen/java" url="@{wsdl}" serverside="true" verbose="false"> <mapping namespace="${ws.ns}" package="@{package}"/> <classpath refid="main.path"/> </axis-wsdl2java> </sequential> </ac:outofdate> </sequential> </macrodef> in this case the target file is a file and not a directory. <gen-java-from-wsdl wsdl="src/main/wsdl/PresenceUserStore.wsdl" targetfile= "build/gen/java/${ws.path}/PresenceUserStore/UserMgmtService.java" package="${ws.package}.PresenceUserStore"/> What DD is saying about missing files is correct, but it is also true for <javac> and other tasks. One should always do an ant clean if one changes the source drastically. Peter PS, please please do not use <antcall> Peter > --------------------------------------------------------------------- > 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]