在Java 11上编译Android数据绑定时,JAXB依赖关系放在哪里?

在Java 11上编译Android数据绑定时,JAXB依赖关系放在哪里?,android,gradle,jaxb,java-11,Android,Gradle,Jaxb,Java 11,我正在使用Android数据绑定,虽然事情很简单,但它工作得很好。然而,一旦我添加了注释,我的项目就停止在Android Studio中构建,出现了一个错误,任务执行失败:app:compilesArferSourceDebugJavaWithJavaC',但它没有给我更多的细节。在命令行上运行gradlew build表明实际错误是java.lang.ClassNotFoundException:javax.xml.bind.jaxbeexception。这是有道理的,因为这个开发机器只安装了

我正在使用Android数据绑定,虽然事情很简单,但它工作得很好。然而,一旦我添加了注释,我的项目就停止在Android Studio中构建,出现了一个错误,任务执行失败:app:compilesArferSourceDebugJavaWithJavaC',但它没有给我更多的细节。在命令行上运行
gradlew build
表明实际错误是
java.lang.ClassNotFoundException:javax.xml.bind.jaxbeexception
。这是有道理的,因为这个开发机器只安装了Java11,而没有安装Java8

我发现,这表示要向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"
    }
}
我知道我可以使用Java8来构建这段代码,但我真的不想处理多个Java版本,我还有其他需要Java11的项目

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


我测试的配置:
  • 操作系统:在Windows 10和Windows Server 2016上测试
  • 构建环境:在AndroidStudio 3.4.1、AndroidStudio 3.5.0-beta04中进行测试,并在命令行上使用Gradle包装器
  • 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版本是唯一有区别的东西。

更新自2020-07-21起,Android bug追踪器:

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


根据截至2019-03-07年Android项目的一名成员的说法:

Android studio及其工具不支持Java 11


相关:如果在Android中使用带有
com.sun
的库,请仔细检查其兼容性。@morrisonchange它一点也不相关。这个问题是关于在我的应用程序中使用JAXB(我没有这样做),这个问题是关于Android构建工具本身使用JAXB的事实。然后应该指定您正在使用的操作系统、Android Studio的版本、数据绑定库的版本、Java 11的版本,以及相关的,可能还有注释尝试的代码片段。您可能在工具中发现了一个bug。@MosheKatz找到解决方法了吗?我也遇到了类似的情况,不想为此安装Java-8。Java-11的其他功能都可以正常工作。