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]