如何通过maven-jaxb从XSD生成所需的类

时间:2015-08-22 06:06:44

标签: java xml maven xsd jaxb

我有两个XSD,其中一个包含另一个,我们称之为A和B.

B有很多xs:complexType个定义,包含在A中,但是A只对其中的一部分感兴趣。

现在发生的是生成B中定义的所有类型的类。 我想要实现的是仅为A直接引用的类型生成类。

我试图修改XSD A来导入B而不是包含但是它没有为maven-jaxb插件工作。

XSD导入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。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

此处maven-jaxb2-plugin的作者。

使用xjc可以实现maven-jaxb2-plugin的可能性。您可以单独使用args/arg进行所有配置。因此,如果你从命令行相信你想要的东西,发布这个命令行,我们将弄清楚如何相应地配置插件。

据我所知,包括模式使得XJC编译整套。如果包含它,则它是一个模式,只是在几个文件中声明。所以你将获得生成的所有类型。

如果您将包含内容更改为导入并从A中的某个顶级模式开始,那么XJC可能会在B中生成更少的类型。但是我无法保证因为我不相信这种行为是XJC公共合同的一部分。如果您通过命令行或Maven插件使用XJC并不重要。下面就是XJC。

我最好的经验是模块化或单独的模式编译:

基本上,您首先编译B并在编译A时将其用作剧集。它与小屋下的jaxb:class/@ref注释一起指向已存在的类而不是重新生成它们。