迁移到JAVA 17如何让gradle从xsd生成java类?

问题描述 投票:0回答:1

我有一个使用 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 xsd gradle-plugin java-17 jakarta-migration
1个回答
0
投票

查看您正在使用的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

© www.soinside.com 2019 - 2024. All rights reserved.