Я использую Android Data Binding, и хотя все было просто, оно работало очень хорошо.Однако, как только я добавил аннотацию 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, и у меня есть другие проекты, требующие Java 11.
Есть ли место вв какую конфигурацию я могу поместить эти зависимости сборки, чтобы заставить их работать?
Конфигурации, которые я тестировал:
- Операционные системы: протестировано в 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 Build Tools: протестировано с 28.0.3 и 29.0.0
Примечание: комментарий запрашивает версию привязки данных, которая больше не актуальна, поскольку привязка данных теперь встроена и не имеет отдельного номера версии.
Ошибка с ошибкой, показанной выше:
Работает правильно:
После всестороннего тестирования становится ясно, что версия Java - единственное, что здесь имеет значение.