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

jaxb2-basics与com.intershop.gradle.jaxb 6.0.0兼容报错问题

问题场景

使用Gradle 8.1.1搭配com.intershop.gradle.jaxb 6.0.0版本,基于Java 17从WSDL生成Java类,需要借助jaxb2-basics扩展来使用-XtoString参数生成带toString方法的类。但在依赖中添加jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1'后,哪怕没加-XtoString参数,执行xjc任务时也直接失败。注释掉该依赖后,生成任务能正常运行。现在需要解决这个兼容性问题,让jaxb2-basics能正常工作,同时可以通过-XtoString参数生成符合要求的Java类。

原项目配置如下:

plugins {
    id "java"
    id 'com.intershop.gradle.jaxb' version '6.0.0'
}

sourceSets {
    main {
        java {
            srcDir "${project.buildDir}/generated-java/csClientWs"
        }
    }
}

repositories {
    mavenCentral()
}

ext {
    testV = '4.7.472.60'
}

dependencies {
    implementation 'com.sun.xml.bind:jaxb-xjc:4.0.2'
    implementation 'com.sun.xml.bind:jaxb-jxc:4.0.2'
    implementation 'com.sun.xml.bind:jaxb-impl:4.0.2'
    implementation 'com.sun.xml.bind:jaxb-core:4.0.2'
    implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.2'
    implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1'
    implementation 'jakarta.activation:jakarta.activation-api:2.1.0'

    jaxbext 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'
    jaxbext 'net.java.dev.jaxb2-commons:jaxb-fluent-api:2.1.8'
    jaxbext 'com.github.jaxb-xew-plugin:jaxb-xew-plugin:2.1'

    //jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1'

    //implementation 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:1.11.1'
    //implementation 'org.jvnet.jaxb2_commons:jaxb2-basics-runtime:1.11.1'
    //implementation 'org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1'
    //implementation 'org.jvnet.jaxb2_commons:jaxb2-basics-annotate:1.1.0'
}

jaxb {
    javaGen {
        csClientWs {
            strictValidation = false
            extension = true
            packageName = 'org.excample.csclient.ws'
            header = true
            schema = file("${projectDir}/src/main/wsdl/test_${testV}.wsdl")
            binding = file("${projectDir}/src/main/wsdl/binding.xjb")
            args = ['-wsdl', '-Xxew', '-Xfluent-api']
        }
    }
}
解决步骤
  1. 版本适配:jaxb2-basics 1.11.1是为JAXB 2.x(javax命名空间)设计的,而当前项目使用的是JAXB 4.x(Jakarta EE 9+,jakarta命名空间),版本不匹配导致冲突。需要改用支持Jakarta的jaxb2-basics版本。
  2. 更新依赖配置:
    • 替换jaxbext中的jaxb2-basics为兼容Jakarta的版本:jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics:2.0.4'
    • 添加对应的runtime依赖到implementation:implementation 'org.jvnet.jaxb2_commons:jaxb2-basics-runtime:2.0.4'
    • 移除旧的javax.xml.bind:jaxb-api依赖,避免与Jakarta API冲突
  3. 启用-XtoString参数:在jaxb任务的args中添加-XtoString

修改后的完整配置:

plugins {
    id "java"
    id 'com.intershop.gradle.jaxb' version '6.0.0'
}

sourceSets {
    main {
        java {
            srcDir "${project.buildDir}/generated-java/csClientWs"
        }
    }
}

repositories {
    mavenCentral()
}

ext {
    testV = '4.7.472.60'
}

dependencies {
    implementation 'com.sun.xml.bind:jaxb-xjc:4.0.2'
    implementation 'com.sun.xml.bind:jaxb-jxc:4.0.2'
    implementation 'com.sun.xml.bind:jaxb-impl:4.0.2'
    implementation 'com.sun.xml.bind:jaxb-core:4.0.2'
    implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.2'
    implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1'
    implementation 'jakarta.activation:jakarta.activation-api:2.1.0'
    // 添加jaxb2-basics runtime依赖
    implementation 'org.jvnet.jaxb2_commons:jaxb2-basics-runtime:2.0.4'

    // 移除旧的javax JAXB API依赖,避免冲突
    // jaxbext 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'
    jaxbext 'net.java.dev.jaxb2-commons:jaxb-fluent-api:2.1.8'
    jaxbext 'com.github.jaxb-xew-plugin:jaxb-xew-plugin:2.1'
    // 使用兼容Jakarta的jaxb2-basics版本
    jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics:2.0.4'
}

jaxb {
    javaGen {
        csClientWs {
            strictValidation = false
            extension = true
            packageName = 'org.excample.csclient.ws'
            header = true
            schema = file("${projectDir}/src/main/wsdl/test_${testV}.wsdl")
            binding = file("${projectDir}/src/main/wsdl/binding.xjb")
            // 添加-XtoString参数
            args = ['-wsdl', '-Xxew', '-Xfluent-api', '-XtoString']
        }
    }
}
验证

执行gradle generateJaxb任务,此时应该能正常生成带toString方法的Java类,且无任务失败报错。

内容的提问来源于stack exchange,提问作者Dmitry Roginin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:05:43