我正在使用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处理第一个任务,然后说下面的模式的“文件是最新的”!
答案 0 :(得分: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>
答案 1 :(得分: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的类路径,因为这意味着您可能需要使用类加载器设置,以获取下载的版本而不是JDK中的版本。
答案 2 :(得分:0)
您还可以使用如下命令将其他xsd文件包含在主xsd文件中:
<xs:include schemaLocation="path/to/secondschema.xsd"/>