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

Where to put JAXB dependency for compiling Android Databinding on 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"

我的问题是我不知道在哪里添加它们。将它们作为 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"
    }
}

我也尝试将它们作为 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"
    }
}

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

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


我测试的配置:

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

失败,上面显示错误:

正常工作:

经过大量测试后,显然 Java 版本是唯一有所不同的地方。

更新 自 2020 年 7 月 21 日起,Android 错误跟踪器 now states:

Studio will also start using JDK 11 starting in 4.2, approx in 1 to 2 months.


根据 Android 项目 on the Android Bug Tracker 的一名成员,截至 2019 年 3 月 7 日:

Java 11 is not supported by Android studio and its tools.