JAXB-2 Maven 插件、模式包含和绑定

JAXB-2 Maven Plugin, schema inclusion and bindings

我正在使用 JAXB-2 Maven 插件从一些 xsd 文件开始生成 java 类。我的配置如下。我有三个没有目标名称空间 A 的模式文件,B 包含在 C 中,然后我有另外两个模式 D 和 E,它们都包含 C。 是否可以使用绑定或不同的执行(带有剧集)让每个模式在不同的包中生成 类?类似于:

A schema (no namespace) -> com.packageA
B schema (no namespace) -> com.packageB
C schema (no namespace) -> com.packageC
D schema (namespace X) -> com.packageD
E schema (namespace X) -> com.packageE

当然没有类重复?或者我能拥有的最好的是有两个包,一个用于 类 属于具有空命名空间的 XSD 文件,另一个用于两个具有命名空间 X 的 XSD 文件?你能提供一个 pom.xml 文件的例子来实现吗? 谢谢 又如何

免责声明:我是 maven-jaxb2-plugin 的作者,所以这个答案是关于那个插件的。

这叫做"separate schema compilation"。这可以使用剧集来实现,请参阅 maven-jaxb2-plugin 文档中的 explanation

简而言之:

  • 为每个逻辑模式创建一个 Maven 项目。我通常每个不同的命名空间都有一个项目。
  • 如果模式 B 使用模式 A,则包括模式 A 的工件作为 B 的依赖项。
  • maven-jaxb2-plugin 将默认使用依赖项作为剧集。
  • 在某些情况下,仍会为包含的剧集生成一些恢复 类。他们不应该,我相信这是 XJC 中的错误。在这些情况下,添加清理任务。
  • 准备好面对一些奇怪的问题,因为 XJC 是一个棘手的工具。

这是一个 project,它以这种方式编译了大量模式。结果是大约 100 多个工件的依赖关系与模式的依赖关系非常相似。

我看到的一个问题是架构 A、B 和 C 具有相同的(空)命名空间,映射到不同的包。这可能不适用于 JAXB(另请参阅 "chameleon namespaces")。