2016-10-14 47 views
0

假設我在資源/目錄中有a.xsd文件,在resources/b目錄中有 b.xsd文件。 a.xsd和b.xsd有它們自己的命名空間:http://a.comhttp://b.com。 最後,a.xsd會導入b.xsd。JAXB:使用maven插件將名稱空間映射到包

我想配置Maven的JAXB2-插件在包com.b包com.a和B.java產生 A.java

  1. 如何將所有的XSD文件從一個名稱空間綁定到另一個命名空間的一個包和所有xsd文件到另一個包。
  2. 如何將兩個不同的目錄傳遞給maven-jaxb2-plugin。 多次執行不適合我。

回答

1

如果單獨提出這些問題會更好。

第一個問題 - 只需使用多個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> 

第二個問題 - 多次執行或自己做一些文件移動後處理。爲什麼多次執行不適合你?

更新:你說你對每個命名空間感興趣,而不是每個文件的解決方案。

首先,它並不重要,最終它是一個每命名空間的解決方案。如果通過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> 
+0

你的解決方案是每個文件,我很感興趣,每次命名空間的解決方案。 – trzeci

+0

@trzeci查看更新。 – lexicore