2014-09-23 56 views
3

我有兩個項目,A和B.在項目A中,我有common.xsd文件,我使用cxf-xjc-插件 來生成運行良好的Java類。接下來,我想重用此創建的文件並在項目B的main.xsd文件中鍵入來自common.xsd 的difinitions,並且不要再從項目A生成類,但會出現問題,因爲我不能包含完整的 在我main.xsd文件路徑從不同的項目導入xsd,生成java類

<xs:import namespace="..." schemaLocation="PATH_TO_PROJECT_A/common.xsd" /> 

,或者你的classpath 我看,這是可以使用HTTP,但我不能使用它。有沒有辦法使用一個maven或其他東西來做到這一點?

回答

2

是的,這是可能的,關鍵字是:

必需免責聲明:我是maven-jaxb2-plugin的作者,它提供了這些功能。

更新:

我試圖用不同的架構編譯,但不幸的是,我不能 undersant它。我應該爲xsd文件創建單獨的jar文件,並使用 作爲依賴項嗎?現在我依賴整個項目A 其中包含生成的類和xsd文件

這就夠了。您需要帶有生成的類,XSD文件和META-INF/sun-jaxb.episode的JAR。所有這些通常都是默認生成的。

然後,您可以將此JAR用作「插曲」。 XJC將自動使用sun-jaxb.episode資源作爲綁定文件,這個文件基本上是這樣說的:「不爲命名空間X中的模式生成任何內容,而是使用下列類。」這是允許您避免重複生成類的一部分。這工作主要是,但有時XJC仍然會產生一些東西 - 他們可以安全地刪除。

另一件事是你想使用來自JAR的模式。這可以通過目錄和由maven-jaxb2-plugin默認提供的特殊實體解析器完成。

因此,只要使用任何schemaLocation,然後重寫它的目錄文件:

REWRITE_SYSTEM 
"https://acme.com/foo/a.xsd" 
"maven:com.acme.foo:foo-a!/a.xsd" 
+0

我試圖用不同的架構編譯,但不幸的是,我不能undersant它。我應該爲xsd文件創建單獨的jar並將其用作依賴項嗎?現在我有 依賴於整個項目A,其中包含生成的類和xsd文件 – Unyx 2014-09-23 09:50:48

+0

請參閱更新。 – lexicore 2014-09-23 10:19:06

+0

我點擊eclipse中的common.xsd來生成jaxb類,我擁有它,但是我沒有在這個項目中使用這個插件文件 – Unyx 2014-09-23 10:36:17