I need to use JAXB to autogenerate java source files from an xml schema. The
canonical way to do this in ant, judging from a recent websearch, is the
following fragment that you need to put in your build file:
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
<classpath>
<fileset dir="[jaxws-ri HOME]/lib" includes="*.jar"/>
</classpath>
</taskdef>
<target name="generateSrcJaxb" depends="_cleanSrcJaxb">
<xjc
destdir="${dirSrc}"
package="com.foo.bar"
>
<arg value="-npa"/> <!-- suppress generation of package level
annotations -->
<schema file="${dirConfig}/mySchema.xsd"/>
</xjc>
</target>
I need the <classpath> element inside the <taskdef> because my employer is
still stuck on jdk 1.5 (I understand that 1.6 has this stuff all builtin).
The code above works perfectly if I use a hardcoded path (either absolute or
relative) for [jaxws-ri HOME]. This, of course, is uncool, because I need the
build file to work on other machines besides my own.
The obvious solution is to not hardcode the paths but use properties. I have
done this in the past, and it always worked perfectly for all of my normal ant
targets. For the problem at hand, the code that I would LIKE to use inside the
<classpath> element above is simply
<fileset dir="${dirRoot}/ThirdParty/jaxws-ri/lib" includes="*.jar"/>
This code actually works, but only if I define the dirRoot property on the
command line. That is, if I invoke the build using something like
ant -DdirRoot=../ generateSrcJaxb
This is annoying: i have already defined the dirRoot properties (plus several
others) in an external file called build.properties. I want to invoke the
build using
ant -propertyfile ./build.properties generateSrcJaxb
Unfortunately, when i try executing the code above, I get this error:
BUILD FAILED
C:\...\build.xml:155: C:...\${dirRoot}\ThirdParty\jaxws-ri\lib not found.
(where ... suppress some long and irrelevant paths).
I get the same error if I invoke the build using
ant generateSrcJaxb
but place the code
<property file="./build.properties"/>
inside my build file before the other stuff above.
What seems to be happening is this:
1) ant reads any -D properties from the command line
2) it parses the build.xml file
3) it then reads in any properties from external property files (as specified
by either -propertyfile on the command line or <property file="..."/> elements)
4) it finally executes the build file
The code that I want to use
ant -propertyfile ./build.properties generateSrcJaxb
fails here apparently because ant thinks that it needs to know the value of the
dirRoot property inside the <taskdef> during parse time instead of at execution
time, unlike every other element of the build file, and this info is not
available because it does not parse build.properties early enough, like it
ought to.
Is this a correct diagnosis of what is going on?
Any workarounds?
Should I file a bug report?
Note: I am using the latest prd release, ant 1.7.1 (behavior also present in
1.7.0).
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]