2010-04-06 45 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对象。