2017-08-18 42 views
0

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

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 

当然没有班级重复?或者我可以做的最好的是有两个包,一个用于属于XSDs文件且具有空名称空间的类,另一个用于具有名称空间X的两个XSD文件?你能否提供一个pom.xml文件的例子来实现它? 感谢 又如何能

回答

0

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

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

简而言之:

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

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

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

+0

非常感谢@lexicore,有没有办法做你没有很多不同的文物解释? – filmac

+0

您可以有两个包 - 一个用于空名称空间,一个用于名称空间X. – lexicore