簡體   English   中英

從不同的項目導入xsd,生成java類

[英]xsd import from different project, generate java class

我有兩個項目,A和B.在項目AI中有common.xsd文件,我使用cxf-xjc-plugin生成工作正常的java類。 接下來,我想重用這個創建的文件,並從項目B的main.xsd文件中的common.xsd中鍵入difinitions,並且不再從項目A生成類,但是有一個問題,因為我不能包含完整路徑我的main.xsd文件

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

或者你的類路徑我讀到可以使用http,但我不能使用它。 有沒有辦法使用maven或其他東西來做到這一點?

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

  • 使用劇集分隔模式編譯 ,以避免生成已生成的類
  • 目錄以覆蓋模式位置,包括指向Maven工件內的模式

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

更新:

我試圖使用單獨的模式編譯,但不幸的是我不能忽略它。 我應該只為xsd文件創建單獨的jar並將其用作依賴項嗎? 現在我依賴於整個項目A,它包含生成的類和xsd文件

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

然后你可以將這個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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM