在 Java 11 上编译 Android 数据绑定的 JAXB 依赖项放在哪里?

Mos*_*atz 10 android jaxb gradle java-11

我正在使用 Android 数据绑定,虽然事情很简单,但效果很好。然而,一旦我添加了一个BindingAdapter注释,我的项目就停止在 Android Studio 中构建并出现错误Execution failed for task ':app:compileSaferesourceDebugJavaWithJavac',但它没有给我更多细节。gradlew build在命令行上运行显示实际错误是java.lang.ClassNotFoundException: javax.xml.bind.JAXBException. 这是有道理的,因为这台开发机器只安装了 Java 11,没有安装 Java 8。

我找到了这个答案,它说要向 gradle 添加以下依赖项:

implementation "javax.xml.bind:jaxb-api:2.2.11"
implementation "com.sun.xml.bind:jaxb-core:2.2.11"
implementation "com.sun.xml.bind:jaxb-impl:2.2.11"
implementation "javax.activation:activation:1.1.1"
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道在哪里添加它们。将它们作为implementation依赖项添加到app/build.gradle不起作用,因为 JAXB 是构建工具的依赖项,而不是我的应用程序本身的依赖项。

我也尝试添加它们buildscript.dependencies,但这也不起作用:

buildscript {
    repositories {
        google()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }

    dependencies {
        classpath "javax.xml.bind:jaxb-api:2.3.1"
        classpath "com.sun.xml.bind:jaxb-core:2.3.0"
        classpath "com.sun.xml.bind:jaxb-impl:2.3.1"
        classpath "javax.activation:activation:1.1.1"
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试将它们添加到buildscript.dependencies项目根build.gradle文件中,但这也无济于事:

buildscript {
    repositories {
        google()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }

    dependencies {
        classpath "javax.xml.bind:jaxb-api:2.3.1"
        classpath "com.sun.xml.bind:jaxb-core:2.3.0"
        classpath "com.sun.xml.bind:jaxb-impl:2.3.1"
        classpath "javax.activation:activation:1.1.1"
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 Java 8 来构建此代码,但我真的不想处理多个 Java 版本,而且我还有其他需要 Java 11 的项目。

在 gradle 配置中是否有一个地方可以放置这些构建依赖项以使它们工作?


我测试的配置:

  • 操作系统:在 Windows 10 和 Windows Server 2016 上测试
  • 构建环境:在 Android Studio 3.4.1、Android Studio 3.5.0-beta04 中测试,并在命令行上使用 Gradle Wrapper
  • Android Gradle 插件:使用 3.4.1 和 3.5.0-beta04 测试
  • Android 构建工具:使用 28.0.3 和 29.0.0 测试

注意:注释要求提供数据绑定版本,该版本不再相关,因为数据绑定现在是内置的并且没有单独的版本号。

失败并显示上面的错误:

  • Java 11.0.1 x64

好好工作:

  • Java 1.8.0_212 x64

经过广泛的测试,很明显,Java 版本是唯一在这里产生任何区别的东西。

Mos*_*atz 10

更新截至 2020 年 7 月 21 日,Android 错误跟踪器现在声明

Studio 还将从 4.2 开始使用 JDK 11,大约需要 1 到 2 个月。


截至 2019 年 3月 7 日,Android Bug Tracker 上的一名 Android 项目成员表示:

Android Studio 及其工具不支持 Java 11。