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]

Reply via email to