【发布时间】:2015-07-26 18:08:27
【问题描述】:
我正在尝试使用 JAXB 从 WSDL 生成类,这些类使用 Jsr303Annotations 进行注释并提供 equals 和 hashcode 的实现。
这两个单独工作,但是当我尝试同时满足这两个要求时,我得到了错误:
在“构建工作区”期间发生内部错误。 com.sun.tools.xjc.Plugin: Provider org.jvnet.jaxb2_commons.plugin.fixjaxb1058.FixJAXB1058Plugin 无法实例化: java.lang.NoClassDefFoundError: org/jvnet/jaxb2_commons/reflection/util/Accessor p>
有人能告诉我如何配置 JAXB 来完成这两项工作吗?
下面是我的尝试:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<id>generate-wsdl</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources</schemaDirectory>
<schemaIncludes>
<include>*.wsdl</include>
<!-- <include>*.xsd</include> -->
</schemaIncludes>
<!-- <forceRegenerate>true</forceRegenerate> -->
<!-- <removeOldOutput>true</removeOldOutput> -->
<!-- <cleanPackageDirectories>true</cleanPackageDirectories> -->
<strict>true</strict>
<extension>true</extension>
<args>
<arg>-XJsr303Annotations</arg>
<arg>-Xannotate</arg>
<arg>-Xequals</arg>
<arg>-XhashCode</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.3</version>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.9.4</version>
</plugin>
<plugin>
<groupId>com.github.krasa</groupId>
<artifactId>krasa-jaxb-tools</artifactId>
<version>1.1</version>
</plugin>
</plugins>
</configuration>
</execution>
</executions>
</plugin>
编辑:我尝试使用的相关依赖项:
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-runtime</artifactId>
<version>0.9.4</version>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.jvnet.jaxb2_commons</groupId> -->
<!-- <artifactId>jaxb2-basics-annotate</artifactId> -->
<!-- <version>1.0.0</version> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.jvnet.jaxb2_commons</groupId> -->
<!-- <artifactId>jaxb2-commons-lang</artifactId> -->
<!-- <version>2.3</version> -->
<!-- </dependency> -->
只有第一个依赖和插件的组合才能产生结果。
如果我包含其他 2 个依赖项,那么项目中的每个依赖项都会缺少 artifact -id 消息。
注解插件无需显式依赖即可工作,当不使用 equals/hashcode 插件时,反之亦然。
编辑:最终解决方案,以防有人陷入同一问题
因此需要将注解和 equals/hash 代码插件分开执行,这解决了所有问题。
【问题讨论】:
-
想解释一下为什么这是题外话?由于我对 maven 还很陌生,所以我不知道这些插件需要执行两次才能工作,也不是我可以谷歌搜索的信息。
-
我刚刚解决了我们的问题
-
您能否添加一个答案,说明您如何分离两个插件的执行。我也遇到了同样的问题,我无法将它分成两个不同的执行