【问题标题】:Gradle jaxb code generation failing when annotation in xsd在 xsd 中注释时,Gradle jaxb 代码生成失败
【发布时间】:2022-11-05 20:21:24
【问题描述】:

我正在尝试将 Maven 构建转换为 Gradle。两个模块使用 JAXB 代码生成从 XSD 生成代码。第一个模块正在工作,但第二个模块失败。 我正在使用 intershop Gradle jaxb 插件:

https://github.com/IntershopCommunicationsAG/jaxb-gradle-plugin

我的 Gradle 构建文件中的设置如下所示:

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'

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',
                '-Xvalue-constructor',
                '-XtoString',
                '-Xequals',
                '-XhashCode',
                '-Xcopyable',
                '-Xmergeable',
                '-Xdefault-value',
                '-Xfluent-api',
                '-verbose'
        ]
    }
  }
}

构建失败,注释上有多个错误:

[ant:jaxb] [ERROR] Error parsing annotation.
[ant:jaxb] unknown location
[ant:jaxb]
[ant:jaxb] [ERROR] Error parsing annotation.
[ant:jaxb] unknown location

我们的 XSD 包含用于注释生成的 annox 命名空间:

xmlns:annox="http://annox.dev.java.net"
jaxb:extensionBindingPrefixes="xjc annox"

我们有如下注释:

        <xsd:element name="startDate" type="xsd:date" minOccurs="0">
            <xsd:annotation>
                <xsd:appinfo>
                    <annox:annotate target="getter">@com.fasterxml.jackson.annotation.JsonIgnore</annox:annotate>
                </xsd:appinfo>
            </xsd:annotation>
        </xsd:element>

大概我缺少一些设置来允许 JAXB 处理这些注释,但它是什么?在 Gradle 任务中配置?还是类路径上的另一个库?我知道有不同的 XJC 任务可用 - 我已经用 XJCTask 和 XJC2Task 尝试过,它们都失败并出现相同的错误。

【问题讨论】:

    标签: gradle jaxb


    【解决方案1】:

    包含注释的 jar 必须存在于 jaxbext 配置中。在这种情况下,注释是 Jackson @JsonIgnore 注释,所以我添加了一个依赖项:

    jaxbext "com.fasterxml.jackson.core:jackson-annotations:$versions.jackson"
    

    我们还使用了 Jackson @JsonSerialize 注释,为此,添加:

    jaxbext "com.fasterxml.jackson.core:jackson-databind:$versions.jackson"
    

    在我们的例子中,我们有一个多模块构建,所以我引用了定义版本的顶级构建文件中的属性。在较小的版本中,您可以明确定义版本。

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多