首页 > 解决方案 > 添加 jaxb2-basics-annotate 插件会导致不再生成构建器函数

问题描述

我正在使用 maven-jaxb2-plugin 从导入到项目中的服务 wsdl 生成 java 类。

<plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <phase>generate-sources</phase>
                    <configuration>                    <schemaDirectory>src/main/resources</schemaDirectory>
                        <schemaLanguage>WSDL</schemaLanguage>
                        <schemaIncludes>
                            <schemaInclude>blabla.wsdl</schemaInclude>
                        </schemaIncludes>
                        <bindingIncludes>
                            <bindingInclude>bindings.xjb</bindingInclude>
                        </bindingIncludes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>

这工作得很好,并且为每个对象生成了构建器函数。所以基本的 .withParameter(Param param) 函数,它设置值并返回自身。

不幸的是,XmlRootElement 注释没有添加到主请求和响应对象中。我了解到您可以通过添加插件 jasb2-basics-annotate 来添加它,并将参数 -Xannotate 添加到 pom.xml 中。

结果pom是:

<plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <phase>generate-sources</phase>
                    <configuration>
                        <args>
                            <arg>-Xannotate</arg>
                        </args>
                        <plugins>
                            <plugin>                                    <groupId>org.jvnet.jaxb2_commons</groupId>
                                <artifactId>jaxb2-basics-annotate</artifactId>
                                <version>0.6.0</version>
                            </plugin>
                        </plugins>
                        <schemaDirectory>src/main/resources</schemaDirectory>
                        <schemaLanguage>WSDL</schemaLanguage>
                        <schemaIncludes>
                            <schemaInclude>blabla.wsdl</schemaInclude>
                        </schemaIncludes>
                        <bindingIncludes>
                            <bindingInclude>bindings.xjb</bindingInclude>
                        </bindingIncludes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>

这适用于我需要的 @XmlRootElement 注释。不幸的是,不再生成构建器函数。现在对象只有 getter 和 setter。

有谁知道是什么原因造成的,是否有办法让它再次生成这些功能?

标签: javajaxb2

解决方案


您可以在 jaxb2-basics-annotate 之后添加另一个插件来生成构建器,即:

        <plugin>
            <groupId>net.java.dev.jaxb2-commons</groupId>
            <artifactId>jaxb-fluent-api</artifactId>
            <version>2.1.8</version>
        </plugin>

您还必须包括以下参数:

         <args>
            <arg>-Xannotate</arg>
            <arg>-Xfluent-api</arg>
         </args>

还请检查 fluent-api 插件是否尚未添加到配置的另一部分(可能是 pom 的分层父级之一中的pluginManagement),因为问题可能是您刚刚覆盖了插件中 pluginManagement 的参数,就是为什么它停止工作。


推荐阅读