You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Gradle环境中含注解XSD的JAXB代码生成失败问题求助

解决JAXB Gradle插件处理annox注解时的解析错误

从你描述的问题来看,核心原因是XJC在解析XSD中的annox注解时,缺少必要的依赖或配置支持。第一个模块正常是因为它没有使用第三方注解(比如你示例中的@JsonIgnore),而第二个模块用到了这类注解,导致解析失败。以下是具体的解决方案:

1. 补充第三方注解的依赖

你在XSD中使用了@com.fasterxml.jackson.annotation.JsonIgnore,但当前的jaxbext依赖里没有包含Jackson注解库——XJC在解析这个注解时需要找到对应的类,否则就会抛出"Error parsing annotation"错误。

在你的Gradle配置中添加Jackson注解依赖:

jaxbext 'com.fasterxml.jackson.core:jackson-annotations:2.15.2' // 版本可根据项目实际调整

完整的依赖块示例:

jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics-annotate:1.0.2'
jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:0.10.0'
jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics:0.10.0'
jaxbext 'org.jvnet.jaxb2_commons:jaxb2-default-value:1.1'
jaxbext 'org.jvnet.jaxb2_commons:jaxb2-fluent-api:3.0'
jaxbext 'org.jvnet.jaxb2_commons:jaxb2-value-constructor:3.0'
jaxbext 'org.jvnet.annox:annox:1.0.1'
jaxbext 'org.slf4j:slf4j-simple:1.7.25'
// 新增:让XJC能解析Jackson注解
jaxbext 'com.fasterxml.jackson.core:jackson-annotations:2.15.2'

2. 启用注解调试定位问题

如果添加依赖后仍有错误,建议在JAXB任务的args中添加-Xannotate-debug参数,获取更详细的错误堆栈,方便定位具体是哪个注解解析失败:

jaxb {
    javaGen {
        apiModelClasses {
            schemas = fileTree("$buildDir/xsds") { include ('file1.xsd','file2.xsd') }
            bindings = fileTree("$buildDir/xsds") { include 'jaxbbindings.xjb' }
            extension = true
            antTaskClassName = 'org.jvnet.jaxb2_commons.xjc.XJC2Task'
            args = [
                '-npa',
                '-Xannotate',
                '-Xannotate-debug', // 新增:输出详细注解解析日志
                '-Xvalue-constructor',
                '-XtoString',
                '-Xequals',
                '-XhashCode',
                '-Xcopyable',
                '-Xmergeable',
                '-Xdefault-value',
                '-Xfluent-api',
                '-verbose'
            ]
        }
    }
}

3. 检查版本兼容性

你当前使用的jaxb2-basics-annotate:1.0.2jaxb2-basics:0.10.0版本可能存在兼容性问题。可以尝试将jaxb2-basics系列依赖统一到相同版本,比如:

jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics-annotate:0.10.0'
jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:0.10.0'
jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics:0.10.0'

4. 验证绑定文件的命名空间

确保你的jaxbbindings.xjb文件中正确声明了annox命名空间:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:annox="http://annox.dev.java.net"
               jaxb:extensionBindingPrefixes="annox"
               jaxb:version="2.1">
    <!-- 你的绑定规则 -->
</jaxb:bindings>

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

火山引擎 最新活动