在哪里放置 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 配置中是否有一个地方可以放置这些构建依赖项以使其正常工作?
我测试的配置:
- 操作系统:在 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
正常工作:
- Java1.8.0_212x64
经过大量测试后,显然 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.
我正在使用 Android 数据绑定,虽然事情很简单,但效果很好。但是,一旦我添加了 BindingAdapter
注释,我的项目就停止在 Android Studio 中构建并出现错误 Execution failed for task ':app:compileSaferesourceDebugJavaWithJavac'
,但它没有提供更多详细信息。 运行 gradlew build
命令行显示实际错误是 java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
。这是有道理的,因为这台开发机器只安装了 Java 11,而不是 Java 8.
我找到了
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 配置中是否有一个地方可以放置这些构建依赖项以使其正常工作?
我测试的配置:
- 操作系统:在 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
正常工作:
- Java1.8.0_212x64
经过大量测试后,显然 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.