java - 添加 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。
有谁知道是什么原因造成的,是否有办法让它再次生成这些功能?
解决方案
您可以在 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 的参数,这就是为什么它停止工作。
推荐阅读
- elasticsearch - 使用 elasticsearch 搜索特殊字符
- angularjs - Angularjs 需要模型中数组的验证器
- docker - 在 kubernetes 上使用带有 bitnami/magento 容器的自定义模块
- javascript - 如何将匿名帐户转换为永久帐户
- elasticsearch - Hibernate Search 查询从实际数据库而不是从弹性数据库索引中获取数据
- c - 谁能解释一下“if”语句是如何在这里执行的
- swift - 在 Swift 中使用 firstIndex(of: Character) 时是否总是需要 Nil-Coalescing?
- c++ - CreateFile() 方法返回 ERROR_NOACCESS 错误
- python - 具有重复输入的神经网络 - Keras
- java - 如何在运行时使用字节伙伴有效地将接口与 POJO 关联?