用Kotlin进行数据绑定:ProcessDataBinding无法获取公共的无参数构造函数

时间:2018-10-07 13:45:50

标签: android gradle kotlin android-databinding

在命令行中输入./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。

5 个答案:

答案 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 constructorjava.lang.NoClassDefFoundError: javax/xml/bind/JAXBException 异常。但是当我从Android Studio运行构建时,这些没有出现。我怀疑这是因为Android Studio以某种方式使用了自己的Java版本。

答案 2 :(得分:0)

由于Java版本> 8

将您的JAVA_HOME指向Java 8版本,即可正常运行

Java 8下载link

详细信息解决方案是here

答案 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工具窗口中转到 [应用程序名称](根)> 任务> 验证> 测试

Here is a screenshot of how it looks