【发布时间】: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 尝试过,它们都失败并出现相同的错误。
【问题讨论】: