我有一个使用 Java 类的应用程序,这些类是使用 JDK 8 实现的 xsd 文件中的 gradle 生成的。
现在我们必须迁移到JAVA17。
类生成不再起作用。
xjc 插件
'org.unbroken-dome.xjc' version '2.0.0'
已用于此目的,但这会生成 javax.xml...而不是 jakarta.xml...error: package javax.xml.bind.annotation does not exist
gradle.build 文件:
plugins {
id 'java-library'
id 'org.unbroken-dome.xjc' version '2.0.0'
}
dependencies {
implementation ....
}
xjc {
srcDirName = 'resources/xsd'
extension = true
}
我已添加到build.gradle
implementation ('jakarta.xml.bind:jakarta.xml.bind-api:4.0.0')
我找到了xjb-bindingfile必须更新的信息
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:version="2.1">
至
<jaxb:bindings xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="https://jakarta.ee/xml/ns/jaxb/xjc"
jaxb:version="3.0">
但是当我这样做时,我收到错误,抱怨网址错误
> A failure occurred while executing org.unbrokendome.gradle.plugins.xjc.work.xjc23.XjcGeneratorWorkAction
> Parse failed
还搜索了几天其他插件来使用,但我无法让它们工作,也许我的 gradle 知识太差了......
查看您正在使用的gradle插件的源代码:
'org.unbroken-dome.xjc' version '2.0.0'
,似乎可以使用jakarta api而不是java.xml.bind(自Java 11以来已删除)配置xjcVersion
属性,并使用此依赖项而不是 jakarta 4.0.0 (因为似乎尚未支持它)。
xjc {
xjcVersion = '3.0'
}
dependencies {
// XJC 3.0 requires a different JAXB API artifact
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.0-RC3'
}
您可以在插件源存储库中查看示例:https://github.com/unbroken-dome/gradle-xjc-plugin/blob/master/samples/groovy-dsl/xjc-version-3_0/build.gradle
作为附加评论,请注意,该插件的最后一个版本是 2020 年的,并且目前似乎尚未开发,如果您想支持新的 jakarta 版本,也许您可以尝试使用其他正在开发的插件并支持更新版本库:https://github.com/bjornvester/xjc-gradle-plugin