Как я могу обработать несколько схем xsd, используя jaxb и задачу Ant xjc? - PullRequest
9 голосов
/ 18 декабря 2009

Я использую jaxb для генерации java-объекта класса из XML-схем внутри скрипта 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>

Теперь это прекрасно работает для одной схемы (в этом примере ff.xsd). Как я могу обработать несколько схем (то есть несколько файлов xsd)?

Я попытался создать отдельную задачу ant для каждой схемы, но каким-то образом это не работает, поскольку Ant обрабатывает первую задачу, а затем говорит, что «файлы обновлены» для следующих схем!

Ответы [ 3 ]

11 голосов
/ 18 декабря 2009
<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>
3 голосов
/ 03 сентября 2010
<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>

работает с JAXB, который является частью JDK 6, кажется, что задача ANT поставляется только с загружаемым JAXB, но, поскольку JAXB является частью JDK, вероятно, не очень хорошая идея взять последний выпуск JAXB и добавить к classpath JDK, поскольку это означает, что вам, вероятно, нужно возиться с настройками загрузчика классов, чтобы получить загруженную версию, а не версию в JDK.

0 голосов
/ 01 октября 2014

Вы также можете просто включить другие xsd-файлы в свой основной xsd-файл, используя следующую команду:

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