2009-12-17 8 views
9

Ich verwende jaxb Java-Objekt-Klasse von XML-Schema in einer Ant-Skript wie so zu generieren:Wie kann ich mehrere xsd shemas mit jaxb und der Ant xjc Aufgabe verarbeiten?

<!-- JAXB compiler task definition --> 
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask" 
        classpathref="master-classpath"/> 

<!-- Generates the source code from the ff.xsd schema using jaxb --> 
<target name="option-generate" description="Generates the source code"> 
    <mkdir dir="${generated-src.dir}/${option.dir}"/> 
    <xjc schema="${config.dir}/ff.xsd" destdir="${generated-src.dir}" 
     package="${option.package.name}"> 
     <arg value="-Xcommons-lang" /> 
     <arg value="-Xcommons-lang:ToStringStyle=SHORT_PREFIX_STYLE" /> 
     <produces dir="${generated-src.dir}" includes="**/*.java" /> 
    </xjc> 
</target> 

Nun, dies brillant für ein Schema (in diesem Beispiel ff.xsd) arbeitet. Wie kann ich mehrere Schemas (d. H. Mehrere xsd-Dateien) verarbeiten?

Ich habe versucht, eine separate ant Aufgabe pro Schema, aber irgendwie funktioniert dies nicht als Ant Prozess die erste Aufgabe und sagt dann, dass die "Dateien sind auf dem neuesten Stand" für die folgenden Schemas!

Irgendwelche Ideen?

Antwort

11
<target name="process-resources" description="Process resources"> 
    <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask"/> 
    <xjc destdir="${basedir}/target/generated-sources/jaxb" 
     extension="true"> 
     <schema dir="src/main/xsd" 
       includes="JaxbBindings.xsd,CoreTypes.xsd"/> 
    </xjc> 
</target> 
+0

ah groß, genau das, was ich needed.Thanks! – dm76

3
<target name="generate-jaxb-code"> 
    <java classname="com.sun.tools.internal.xjc.XJCFacade"> 
      <arg value="-p" /> 
      <arg value="com.example"/> 
      <arg value="xsd/sample.xsd" /> 
    </java> 
</target> 

Arbeiten mit dem JAXB, den Teil des JDK 6 scheint, dass die ANT-Task nur Schiffe mit dem herunterladbaren JAXB aber da JAXB Teil des JDK seiner wahrscheinlich keine gute Idee, die neueste Version zu nehmen ist, JAXB und fügen Sie sie dem Klassenpfad des JDK hinzu, da Sie wahrscheinlich mit den Einstellungen des Klassenladers herumspielen müssen, um die heruntergeladene Version und nicht die Version innerhalb des JDK abzurufen.

0

Sie können auch nur die anderen XSD-Dateien in Ihrem Haupt-XSD-Datei, einen Befehl wie den folgenden verwenden:

<xs:include schemaLocation="path/to/secondschema.xsd"/> 
+0

Wie kompiliere ich mehrere xsds mit diesem Ant-Ziel? –

+0

@VinitGaikwad Ich denke, ich sagte, dass Sie auf Ihre Haupt 'xsd' zeigen, aber dass die Hauptdatei' xsd' verschachtelte Include-Direktiven zu anderen 'xsd' -Dateien haben kann. Dies würde dazu führen, dass JAXB alle verschachtelten "xsd" -Dateien verarbeitet, obwohl die oberste Ebene Ihres Codes nur auf eine oberste Ebene "xsd" zeigt. Aber ich habe das schon lange nicht mehr gemacht, also müsstest du die Details überprüfen. – CodeMed