如何通过 maven-jaxb 从 XSD 生成只需要的 类
how to generate only required classes from XSDs via maven-jaxb
我有两个 XSD,其中一个包含另一个,我们称它们为 A 和 B。
B 有很多 xs:complexType
定义并被 A 包含,但是 A 只想使用其中的一些。
现在发生的是为 B 中定义的所有类型生成 类。
我想要实现的是只为 A.
直接引用的类型生成 类
我曾尝试修改 XSD A 以导入 B 而不是包含,但它对 maven-jaxb 插件不起作用。
XSD A 导入 B:
<xs:import schemaLocation="B.xsd" />
用于生成源的插件设置:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<id>generate-xsd</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources</schemaDirectory>
<schemaIncludes>
<include>xsd/*.xsd</include>
</schemaIncludes>
<strict>true</strict>
<extension>true</extension>
<args>
<arg>-XJsr303Annotations</arg>
<arg>-Xannotate</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.3</version>
</plugin>
<plugin>
<groupId>com.github.krasa</groupId>
<artifactId>krasa-jaxb-tools</artifactId>
<version>1.1</version>
</plugin>
</plugins>
</configuration>
</execution>
</executions>
</plugin>
我知道有一种方法可以从命令行用 xjc 实现我的要求,但是用于注释 类 进行验证的插件不会触发。
我需要的是一种只生成必需的 类 同时保留运行时注释的方法,例如下面插件生成的 @NotNull
。有人可以帮忙吗?
maven-jaxb2-plugin作者在这里。
xjc
的可能性,maven-jaxb2-plugin
的可能性。您可以单独使用 args/arg
完成所有配置。因此,如果您认为可以通过命令行实现您想要的功能,post 此命令行,我们将弄清楚如何相应地配置插件。
据我所知,包括模式使得 XJC 编译了整个集合。如果包含,它是一个模式,只是在几个文件中声明。所以你会得到所有生成的类型。
如果您将包含更改为导入并从 A 中的某个顶层模式开始,那么 XJC 可能会在 B 中生成更少的类型。但是不能保证,因为我不相信这种行为是 XJC 的一部分public合同。并且无论您是通过命令行还是通过 Maven 插件使用 XJC 都没有关系。下面是同一个 XJC。
我最有经验的是模块化或单独的模式编译:
基本上,您先编译 B,然后在编译 A 时将其用作一集。它与小屋下的 jaxb:class/@ref
注释一起使用,以指向已经存在的 类 而不是重新生成它们。
我有两个 XSD,其中一个包含另一个,我们称它们为 A 和 B。
B 有很多 xs:complexType
定义并被 A 包含,但是 A 只想使用其中的一些。
现在发生的是为 B 中定义的所有类型生成 类。 我想要实现的是只为 A.
直接引用的类型生成 类我曾尝试修改 XSD A 以导入 B 而不是包含,但它对 maven-jaxb 插件不起作用。
XSD A 导入 B:
<xs:import schemaLocation="B.xsd" />
用于生成源的插件设置:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<id>generate-xsd</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources</schemaDirectory>
<schemaIncludes>
<include>xsd/*.xsd</include>
</schemaIncludes>
<strict>true</strict>
<extension>true</extension>
<args>
<arg>-XJsr303Annotations</arg>
<arg>-Xannotate</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.3</version>
</plugin>
<plugin>
<groupId>com.github.krasa</groupId>
<artifactId>krasa-jaxb-tools</artifactId>
<version>1.1</version>
</plugin>
</plugins>
</configuration>
</execution>
</executions>
</plugin>
我知道有一种方法可以从命令行用 xjc 实现我的要求,但是用于注释 类 进行验证的插件不会触发。
我需要的是一种只生成必需的 类 同时保留运行时注释的方法,例如下面插件生成的 @NotNull
。有人可以帮忙吗?
maven-jaxb2-plugin作者在这里。
xjc
的可能性,maven-jaxb2-plugin
的可能性。您可以单独使用 args/arg
完成所有配置。因此,如果您认为可以通过命令行实现您想要的功能,post 此命令行,我们将弄清楚如何相应地配置插件。
据我所知,包括模式使得 XJC 编译了整个集合。如果包含,它是一个模式,只是在几个文件中声明。所以你会得到所有生成的类型。
如果您将包含更改为导入并从 A 中的某个顶层模式开始,那么 XJC 可能会在 B 中生成更少的类型。但是不能保证,因为我不相信这种行为是 XJC 的一部分public合同。并且无论您是通过命令行还是通过 Maven 插件使用 XJC 都没有关系。下面是同一个 XJC。
我最有经验的是模块化或单独的模式编译:
基本上,您先编译 B,然后在编译 A 时将其用作一集。它与小屋下的 jaxb:class/@ref
注释一起使用,以指向已经存在的 类 而不是重新生成它们。