2010-04-06 79 views
1

我有兩個Java項目,都基於模式定義生成Java類,我使用xjc來創建類。如何防止JAXB從導入的模式中生成Java?

我的第二個項目依賴於第一個項目中的類,特別是我想在第二個項目中生成的其中一個類需要使用第一個項目中的一個類型。

要在模式級別完成此依賴項,我使用簡單的xsd:import將名稱空間映射到特定模式。

JAXB在這種情況下工作得很好,除了它還在第二個項目中生成第一個項目的類型。運行後,所以有這樣的事情:

 
Project A 
    +-- com.foo.bar 
    +-- TypeA 

Project B 
    +-- com.foo.asdf 
    +-- TypeB 
    +-- com.foo.bar 
    +-- TypeA 

第二個「類型A」是不可取的,我想首先不能產生它。我如何指示JAXB不生成它作爲導入語句的結果找到的「TypeA」的類?

+1

難道你不能讓它產生類,而忽略那些你不需要的,或重新包裝你需要的類嗎? – skaffman 2010-04-06 21:39:33

+0

@skaffman,我通過螞蟻運行整個事情,我目前正在運行一個任務來刪除額外的類,但在我看來應該有更好的方法。 – 2010-04-06 21:47:01

回答

5

將其自定義爲DOM元素(<jaxb:dom/>)。

<xs:element name="a" type="a:Type"> 
    <xs:annotation> 
    <xs:appinfo> 
     <jaxb:dom/> 
    </xs:appinfo> 
    </xs:annotation> 
</xs:element> 

您可能也有興趣separate/episodic schema compilation

+0

也許我誤解了...但我添加了這個註釋到ProjectB中的元素,並重新編譯,我仍然得到了ProjectA的類型,我試着刪除導入,併產生一個錯誤。你能澄清你的例子嗎? – 2010-04-06 22:19:16

+2

jaxb:dom只有幫助從B到A去除依賴關係。您將得到一個DOM元素而不是AType - 因此沒有編譯時間依賴性。 一個更正確的解決方案是劇集。檢查這個Maven項目例如: http://download.java.net/maven/2/org/jvnet/jaxb2/maven2/maven-jaxb2-plugin-sample-episode/ 參見從Kohsuke此博客條目: http://weblogs.java.net/blog/2006/09/05/separate-compilation-jaxb-ri-21 – lexicore 2010-04-06 22:40:26

+1

謝謝 - 使用插曲修復了我的問題。 – 2010-05-06 11:36:30

0

另一個選擇是如果你谷歌插曲編譯,所以如果項目A已經有jaxb對象,你可以使用它的插曲文件來編譯項目B的jaxb對象,但不必重新編譯項目A的xsds對象。