这个主题很老,但在企业业务环境中仍然有意义。我试图避免触摸xsds,以便将来轻松更新它们。这是我的解决方案。
1.大部分xjc:simple
就足够了
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc">
<jxb:globalBindings>
<xjc:simple/> <!-- adds @XmlRootElement annotations -->
</jxb:globalBindings>
</jxb:bindings>
它将主要创建用于导入xsd定义的XmlRootElements。
2.划分您的jaxb2-maven-plugin
处决
我曾经遇到过,如果您尝试从多个xsd定义而不是每个xsd的执行定义生成类,它将产生巨大的差异。
因此,如果您的定义包含多个<source>
,则不要尝试拆分它们:
<execution>
<id>xjc-schema-1</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<xjbSources>
<xjbSource>src/main/resources/xsd/binding.xjb</xjbSource>
</xjbSources>
<sources>
<source>src/main/resources/xsd/definition1/</source>
</sources>
<clearOutputDir>false</clearOutputDir>
</configuration>
</execution>
<execution>
<id>xjc-schema-2</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<xjbSources>
<xjbSource>src/main/resources/xsd/binding.xjb</xjbSource>
</xjbSources>
<sources>
<source>src/main/resources/xsd/definition2/</source>
</sources>
<clearOutputDir>false</clearOutputDir>
</configuration>
</execution>
生成器不会捕捉到一个类可能已足够的事实,因此每次执行都会创建自定义类。那正是我所需要的;)。