JAXB:使用 Maven 插件将命名空间映射到包

trz*_*eci 4 xsd jaxb maven

假设我在 resources/a 目录中有 a.xsd 文件,在 resources/b 目录中有 b.xsd 文件。a.xsd 和 b.xsd 有自己的命名空间:http://a.comhttp://b.com。最后,a.xsd 导入 b.xsd。

我想配置maven-jaxb2-plugin在com.a包中生成A.java,在com.b包中生成B.java

  1. 如何将一个命名空间中的所有 xsd 文件绑定到一个包,以及将另一个命名空间中的所有 xsd 文件绑定到另一个包。
  2. 如何将两个不同的目录传递给 maven-jaxb2-plugin。多次处决对我不起作用。

lex*_*ore 6

如果这些问题分开问会更好。

第一个问题 - 只需使用多个jaxb:schemaBindings.

<jaxb:bindings schemaLocation="a.xsd" node="/xs:schema">
    <jaxb:schemaBindings>
        <jaxb:package name="com.a"/>
    </jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings schemaLocation="b.xsd" node="/xs:schema">
    <jaxb:schemaBindings>
        <jaxb:package name="com.b"/>
    </jaxb:schemaBindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

第二个问题 - 多次执行或自行进行一些文件移动后处理。为什么多次执行对你不起作用?

更新:您说您对每个命名空间而不是每个文件的解决方案感兴趣。

首先,这并不重要,无论如何,最终它都是每个命名空间的解决方案。如果您通过 绑定schemaLocation,XJC 会schemaBindings与该模式的目标命名空间关联。您不必自定义该模式的每个文件,也不能为一个命名空间定义两个包。

其次,您可以改用 SCD 绑定:

<jaxb:bindings scd="x-schema::tns" xmlns:tns="http://a.com">
    <jaxb:schemaBindings>
        <jaxb:package name="com.a"/>
    </jaxb:schemaBindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)