如何防止JAXB从导入的模式生成Java?

Mar*_*iot 1 java jaxb

我有两个Java项目,都基于模式定义生成Java类,我使用xjc来创建类.

我的第二个项目依赖于第一个项目中的一个类,特别是我想在第二个项目中生成的一个类需要使用第一个项目中的一个类.

要在模式级别实现此依赖性,我使用一个简单的xsd:import方法将命名空间映射到特定模式.

JAXB在这种情况下运行得很好,除了它还在第二个项目中生成第一个项目的类型.所以跑完后有这样的事情:

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

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

第二个"TypeA"是不受欢迎的,我想从不首先生成它.如何指示JAXB不生成由于import语句而找到的"TypeA"类?

lex*_*ore 5

将其自定义为DOM元素(<jaxb:dom/>).

<xs:element name="a" type="a:Type">
  <xs:annotation>
    <xs:appinfo>
      <jaxb:dom/>
    </xs:appinfo>
  </xs:annotation>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

您可能还对单独/情节模式编译感兴趣.

  • 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 (2认同)