我正在尝试将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,它们都失败了,并出现相同的错误。
1条答案
按热度按时间eblbsuwk1#
包含注解的jar必须存在于jaxbext配置中。在本例中,注解是Jackson@JsonIgnore注解,因此我添加了一个依赖项:
我们还使用了Jackson@JsonSerialize注解,因此,请添加:
在我们的例子中,我们有一个多模块构建,所以我引用了顶层构建文件中定义版本的属性。