2017-08-18 70 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