在xsd中添加注解时Gradle jaxb代码生成失败

e3bfsja2  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(142)

我正在尝试将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任务中的Config?还是类路径上的另一个库?我知道有一个不同的XJC任务可用-我已经尝试了XJCTask和XJC 2 Task,它们都失败了,并出现相同的错误。

eblbsuwk

eblbsuwk1#

包含注解的jar必须存在于jaxbext配置中。在本例中,注解是Jackson@JsonIgnore注解,因此我添加了一个依赖项:

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

我们还使用了Jackson@JsonSerialize注解,因此,请添加:

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

在我们的例子中,我们有一个多模块构建,所以我引用了顶层构建文件中定义版本的属性。

相关问题