You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle XJC生成equals与hashCode方法失败及报错问题咨询

问题根因

  1. 初始添加参数后未生成对应方法:-Xequals和-XhashCode是JAXB2 Basics主插件提供的能力,你之前仅引入了同套件下的jaxb2-basics-annotate注解插件,未引入主插件包,XJC无法识别对应参数会直接静默忽略,因此既无报错也不会生成目标方法。
  2. 补充插件后出现编译错误:生成的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:06:04