2009-12-17 74 views
9

我使用JAXB生成Ant腳本內XML架構的Java對象類,像這樣:如何使用jaxb和Ant xjc任務處理多個xsd shemas?

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

現在,這個工作出色的一個架構(ff.xsd在這個例子中)。我如何處理幾個模式(即多個xsd文件)?

我試過每個模式都有一個單獨的ant任務,但不知何故,這不起作用,因爲Ant處理第一個任務,然後說下列模式的「文件是最新的」!

任何想法?

回答

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

啊不錯,正是我needed.Thanks! – dm76 2009-12-17 22:14:34

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> 

作品與是JDK 6的一部分JAXB似乎ANT任務只附帶了可下載的JAXB但由於JAXB是JDK的一部分,它可能不是一個好主意,採取最新的版本的JAXB並添加到JDK的類路徑中,因爲這意味着您可能需要解決類加載器設置,以獲取下載的版本而不是JDK中的版本。

0

你也可以包括其他XSD文件在主XSD文件,使用如下命令:

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

如何用這個Ant目標編譯多個xsds? – 2015-02-05 05:23:54

+0

@VinitGaikwad我想我是說你指向你的主'xsd',但是主'xsd'文件可以嵌套include指令到其他'xsd'文件。這將導致JAXB處理所有嵌套的'xsd'文件,即使代碼的頂層只指向一個頂層'xsd'。但我暫時還沒有這樣做,所以你必須檢查細節。 – CodeMed 2015-02-05 19:24:17