11

I am using Android Data Binding, and while things were simple it was working very well. However, once I added a BindingAdapter annotation, my project stopped building in Android Studio with an error Execution failed for task ':app:compileSaferesourceDebugJavaWithJavac', but it didn't give me any more detail. Running gradlew build on the command line showed that the actual error was java.lang.ClassNotFoundException: javax.xml.bind.JAXBException. This makes sense, because this development machine has only Java 11 installed, not Java 8.

I found this answer, which says to add the following dependencies to 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"

The problem I have is that I don't know where to add them. Adding them as implementation dependencies to the app/build.gradle doesn't work, because JAXB is a dependency of the build tools, not of my application itself.

I tried adding them as buildscript.dependencies too, but that didn't work either:

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"
    }
}

I also tried adding them as buildscript.dependencies in the project root build.gradle file, but that also did not help:

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"
    }
}

I know that I can use Java 8 to build this code, but I really don't want to have to deal with multiple Java versions and I have other projects that require Java 11.

Is there a place in the gradle configuration that I can put these build dependencies to get them to work?


Configurations I tested:

  • Operating Systems: Tested on Windows 10 and Windows Server 2016
  • Build Environments: Tested in Android Studio 3.4.1, Android Studio 3.5.0-beta04, and using Gradle Wrapper on the command line
  • Android Gradle Plugin: tested with 3.4.1 and 3.5.0-beta04
  • Android Build Tools: tested with 28.0.3 and 29.0.0

Note: comment asks for Databinding version, which is no longer relevant since Databinding is now built-in and does not have a separate version number.

Fail with error show above:

  • Java 11.0.1 x64

Working properly:

  • Java 1.8.0_212 x64

After extensive testing, it is clear that the Java version is the only thing that makes any difference here.

Moshe Katz
  • 15,992
  • 7
  • 69
  • 116
  • Related: [Standard equivalent for JAXB in Android](https://stackoverflow.com/q/32981294/295004) If you use a library with `com.sun` in it for Android, double check its compatibility. – Morrison Chang Jun 17 '19 at 17:20
  • 1
    @MorrisonChang It's not related at all. That question is about using JAXB in my app (which I am not doing), this question is about the fact that **the Android build tools themselves use JAXB**. – Moshe Katz Jun 17 '19 at 17:24
  • Then should specify the OS you are using, version of Android Studio, version of Databinding library, version of Java 11, and relevant [IDE logs](https://intellij-support.jetbrains.com/hc/en-us/articles/207241085-Locating-IDE-log-files) and perhaps a code snippet of the annotation attempt. It is possible you've found a bug in the tools. – Morrison Chang Jun 17 '19 at 17:34
  • @MosheKatz Did you find any workaround for this? I am in a similar situation and don't want to install Java-8 just for this. Everything else works fine with Java-11. – Manish Jan 10 '20 at 11:58

1 Answers1

9

UPDATE As of 2020-07-21, the Android bug tracker now states:

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


According to a member of the Android Project on the Android Bug Tracker as of 2019-03-07:

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

Moshe Katz
  • 15,992
  • 7
  • 69
  • 116