10

我正在使用 jaxb 从 Ant 脚本中的 xml 模式生成 java 对象类,如下所示:

<!-- 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 处理第一个任务,然后说以下模式的“文件是最新的”!

4

3 回答 3

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>
于 2009-12-17T21:30:41.870 回答
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 中的版本。

于 2010-09-02T21:05:34.160 回答
0

您也可以使用如下命令在主 xsd 文件中包含其他 xsd 文件:

    <xs:include schemaLocation="path/to/secondschema.xsd"/>
于 2014-09-30T22:41:12.837 回答