gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:17:09 25 4
gpt4 key购买 nike

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

我需要这个的原因是很多生成的 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 绑定(bind)元素。

例子:

<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:class/@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 可能会解决您的问题。不直接,但确实如此。

文档:

关于java - xjc 将不同的类发送到不同的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com