在命令行中输入./gradlew test
时出现此错误:
e: java.util.ServiceConfigurationError: javax.annotation.processing.Processor: android.databinding.annotationprocessor.ProcessDataBinding Unable to get public no-arg constructor
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:581)
at ...
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 59 more
> Task :app:kaptDebugKotlin FAILED
FAILURE: Build failed with an exception.
当我在build.gradle中具有kapt "androidx.databinding:databinding-compiler:$gradlePluginVersion"
(对于3.2.0和3.3.0-alpha13版本)时,也会发生这种情况。我没有其他kapt依赖项。我启用了数据绑定,它可以工作,并且我可以通过Android Studio运行测试(渐变任务testDebugUnitTest可以工作)。我使用嵌入式JDK。
答案 0 :(得分:8)
如果需要在Java 9+上使用数据绑定,则需要添加JAX-B依赖项。将此添加到您的build.gradle
的{{1}}块中:
dependencies {}
答案 1 :(得分:2)
我使用Java 8而不是Java 11解决了此问题。Java9和10可能会出现相同的问题。我通过JAVA_HOME
设置了export JAVA_HOME=/path/to/java/8
,然后运行了./gradlew build
。瞧,没错。
当我使用gradle从命令行运行构建时,发生了e: java.util.ServiceConfigurationError: javax.annotation.processing.Processor: android.databinding.annotationprocessor.ProcessDataBinding Unable to get public no-arg constructor
和java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
异常。但是当我从Android Studio运行构建时,这些没有出现。我怀疑这是因为Android Studio以某种方式使用了自己的Java版本。
答案 2 :(得分:0)
答案 3 :(得分:0)
java.util.ServiceConfigurationError: javax.annotation.processing.Processor: android.databinding.annotationprocessor.ProcessDataBinding Unable to get public no-arg constructor
我收到此错误是因为我的 'build.gradle' 、'kotlin_version' 和 'gradle wrapper' 不是最新的。
ext.kotlin_version = '1.3.10' >> '1.3.20'
build:gradle:3.5.2 >> build:gradle:4.2.1
distributions/gradle-5.4.1-all.zip >> distributions/gradle-6.7.1-all.zip
答案 4 :(得分:-1)
尝试在Android Studio的Gradle工具窗口中运行任务,而不是从命令行执行任务(查看> 工具窗口> Gradle >)。要运行 test 任务,请在Gradle工具窗口中转到 [应用程序名称](根)> 任务> 验证> 测试。