2009-12-17 14 views
9

Używam JAXB do generowania java klasy obiektu od schematów XML wewnątrz Ant skrypt tak:Jak mogę przetworzyć wiele shem xsd za pomocą jaxb i zadania Ant xjc Ant?

<!-- 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> 

Teraz działa to doskonale na jednym schemacie (ff.xsd w tym przykładzie). Jak mogę przetworzyć kilka schematów (np. Kilka plików xsd)?

Próbowałem mieć oddzielne zadanie mrówki według schematu, ale jakoś to nie działa, gdy Ant wykonuje pierwsze zadanie, a następnie mówi, że "pliki są aktualne" dla następujących schematów!

Wszelkie pomysły?

Odpowiedz

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 wielki, dokładnie co 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> 

współpracuje z JAXB, który jest częścią JDK 6 wydaje się, że zadanie ANT tylko statki z pobrania JAXB ale ponieważ JAXB jest częścią JDK jej chyba nie jest dobry pomysł, aby wziąć najnowszą wersję JAXB i dodać do ścieżki klasy JDK, ponieważ oznacza to, że prawdopodobnie będziesz musiał zadzierać z ustawieniami modułu ładującego, aby pobrać pobraną wersję zamiast wersji w JDK.

0

Można też po prostu zawierać inne pliki xsd w głównym pliku XSD, przy użyciu polecenia jak poniżej:

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

Jak skompilować wiele plików xsds z tym celem Ant? –

+0

@VinitGaikwad Myślę, że mówiłem, że kierujesz się do głównego 'xsd', ale główny plik' xsd' może zawierać zagnieżdżone dyrektywy do innych plików 'xsd'. To spowodowałoby, że JAXB przetworzy wszystkie zagnieżdżone pliki 'xsd', nawet jeśli najwyższy poziom twojego kodu wskazuje tylko jeden najwyższy poziom' xsd'. Ale nie zrobiłem tego od jakiegoś czasu, więc musiałbyś sprawdzić szczegóły. – CodeMed

Powiązane problemy