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

时间:2017-08-18 17:09:43

标签: java xsd jaxb maven-3

我正在使用JAXB-2 Maven插件从一些xsd文件开始生成java类。我的配置如下。我有三个没有目标命名空间A的模式文件,包含在C中的B,然后我有另外两个模式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文件的例子来实现吗? 谢谢 怎么可以

1 个答案:

答案 0 :(得分:1)

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

这称为“单独的模式编译”。这可以使用剧集来实现,请参阅maven-jaxb2-plugin文档中的explanation

简而言之:

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

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

我看到的一个问题是你有模式A,B和C具有相同(空)命名空间,映射到不同的包。这可能不适用于JAXB(另请参阅“变色龙名称空间”)。