Gradle XJC生成equals与hashCode方法失败及报错问题咨询
问题根因
- 初始添加参数后未生成对应方法:
-Xequals和-XhashCode是JAXB2 Basics主插件提供的能力,你之前仅引入了同套件下的jaxb2-basics-annotate注解插件,未引入主插件包,XJC无法识别对应参数会直接静默忽略,因此既无报错也不会生成目标方法。 - 补充插件后出现编译错误:生成的
equals()、hashCode()方法默认依赖JAXB2 Basics提供的公共工具类和接口,你仅将相关依赖添加到了xjcPlugins作用域,主代码编译阶段无法找到对应类。
解决步骤
1. 补全依赖配置
修改dependencies代码块,添加JAXB2 Basics主插件和对应运行时依赖,版本与现有jaxb2-basics-annotate保持一致:
dependencies { implementation(project(":xxx:xxx-api")) implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.2") // 新增:生成代码的运行时依赖,供编译生成的equals/hashCode方法使用 implementation("org.jvnet.jaxb2_commons:jaxb2-basics-runtime:1.1.0") xjcPlugins("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.2") xjcPlugins("org.jvnet.jaxb2_commons:jaxb2-basics:1.1.0") // 新增:主插件包,提供equals/hashCode生成能力 xjcPlugins("org.jvnet.jaxb2_commons:jaxb2-basics-annotate:1.1.0") }
2. 保留XJC配置
你修改后的XJC配置无需调整,配置如下即可:
xjc { bindingFiles = project.files("$projectDir/src/main/resources/binding.xjb", "$projectDir/src/main/resources/annotations.xjb") options.addAll("-Xannotate", "-Xequals", "-XhashCode") }
修改完成后重新执行构建,即可生成带equals()和hashCode()方法的JAXB类。
如果不需要引入JAXB2 Basics的额外运行时依赖,也可以添加参数-Xequals-useEqualsBuilder=org.apache.commons.lang.builder.EqualsBuilder和-XhashCode-useHashCodeBuilder=org.apache.commons.lang.builder.HashCodeBuilder,自行引入commons-lang依赖即可替换默认实现。
内容的提问来源于stack exchange,提问作者ahoffer
相关产品推荐
相关产品推荐

