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

Woj*_*ski 9 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.
Run Code Online (Sandbox Code Playgroud)

当我kapt "androidx.databinding:databinding-compiler:$gradlePluginVersion"在build.gradle中具有(对于3.2.0和3.3.0-alpha13版本)时,也会发生这种情况。我没有其他kapt依赖项。我启用了数据绑定,它可以工作,并且我可以通过Android Studio运行测试(渐变任务testDebugUnitTest可以工作)。我使用嵌入式JDK。

Hie*_*ker 13

如果您需要在 Java 9+ 上使用数据绑定,则需要添加 JAX-B 依赖项。将此添加到您build.gradle的dependencies {}块中:

// Add missing dependencies for JDK 9+
if (JavaVersion.current().ordinal() >= JavaVersion.VERSION_1_9.ordinal()) {
    // Add both if you're using both Kotlin and Java

    // If you're using Kotlin
    kapt "com.sun.xml.bind:jaxb-core:2.3.0.1"
    kapt "javax.xml.bind:jaxb-api:2.3.1"
    kapt "com.sun.xml.bind:jaxb-impl:2.3.2"

    // If you're using Java
    annotationProcessor "com.sun.xml.bind:jaxb-core:2.3.0.1"
    annotationProcessor "javax.xml.bind:jaxb-api:2.3.1"
}
Run Code Online (Sandbox Code Playgroud)


new*_*our 9

我使用Java 8而不是Java 11来解决此问题。Java9和10可能会出现相同的问题。我设置了JAVA_HOMEvia export JAVA_HOME=/path/to/java/8然后运行./gradlew build。瞧,没有错误。

我有一个例外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 当我使用gradle从命令行运行构建时。但是当我从Android Studio运行构建时,这些没有出现。我怀疑这是因为Android Studio以某种方式使用了自己的Java版本。

  • 使用Java 8是有效的解决方法-应用程序构建。是否有可能以某种方式使用JDK 11运行构建? (2认同)