Где разместить зависимость JAXB для компиляции Android Databinding на Java 11? - PullRequest
1 голос
/ 17 июня 2019

Я использую 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 11.0.1 x64

Работает правильно:

  • Java 1.8.0_212x64

После всестороннего тестирования становится ясно, что версия Java - единственное, что здесь имеет значение.

1 Ответ

0 голосов
/ 19 июня 2019

По словам участника проекта Android в Android Bug Tracker по состоянию на 2019-03-07:

Java 11 не поддерживается студией Android и ее инструментами.

...