繁体   English   中英

xjc将不同的类发送到不同的包

[英]xjc send different classes to different packages

我正在使用JAXB从xsd架构创建类。 有没有办法标记单个complexTypes,以便将它们发送到不同的目标包,而不是将它们全部发送到同一个包?

我需要这个的原因是很多生成的java类将被替换为来自不同源的其他相同名称的类。 手动从一个目标文件夹中删除所有未使用的类是一件痛苦的事。 将所有不需要的类放在不同的文件夹中会更容易,当我将输出导入eclipse时,我可以忽略它。 当我试图简单地从xsd文件中排除不需要的类中的complexType定义时,xjc每次遇到其中一个不需要的类型的属性时都会抛出错误。 我需要保留属性引用,但我希望对这些属性的最终java引用指向已通过其他方式生成的同名类。

这是我用于编译类的build.xml方法。 我该怎么改变它?

  <!--compile Java source files-->
  <target name="compile" description="Compile all Java source files">
    <echo message="Compiling the schema..." />
    <mkdir dir="gen-src" />
    <mkdir dir="gen-src/primer/po" />
    <xjc schema="somefilename.xsd" package="primer.po" destdir="gen-src" binding="rename.xjb">
      <produces dir="gen-src/primer/po" includes="**/*.java" />
    </xjc>
    <echo message="Compiling the java source files..." />
    <mkdir dir="classes" />
    <javac destdir="classes" debug="on">
      <src path="src" />
      <src path="gen-src" />
      <classpath refid="classpath" />
    </javac>
  </target>

我认为这里有两件事可能有所帮助:

  • 使用schemaBindings自定义模式,以将来自不同名称空间的类放在不同的包中。
  • 使用jaxb:class/@ref将类型映射到现有类。

schemaBindings

我通常不建议使用packagegeneratePackage选项来配置输出包。 使用schemaBindings绑定元素。

例:

<jaxb:bindings 
    schemaLocation="ogc/wps/1.0.0/wpsAll.xsd" 
    node="/xs:schema">

    <jaxb:schemaBindings>
        <jaxb:package name="net.opengis.wps.v_1_0_0"/>
    </jaxb:schemaBindings>
</jaxb:bindings>

JAXB:类/ @ REF

如果你这样做

 <xs:complexType name="vehicle">
    <xs:annotation><xs:appinfo>
      <jaxb:class ref="com.acme.foo.Vehicle" />
    </xs:appinfo></xs:annotation>
  </xs:complexType>

然后XJC不应为Vehicle生成新类,而是使用com.acme.foo.Vehicle

这与schemaBindings结合使用可能会解决您的问题。 不是直接的,但确实如此。

文档:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM