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>

現在、これは 1 つのスキーマ (この例では 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 に答える