Android 与Kotlin的数据绑定:ProcessDataBinding无法获取公共无参数构造函数
我在命令行中键入Android 与Kotlin的数据绑定:ProcessDataBinding无法获取公共无参数构造函数,android,gradle,kotlin,android-databinding,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.ServiceLoade
/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编译器:$gradlePluginVersion”
(3.2.0和3.3.0-alpha13版本)时,也会发生这种情况。我没有其他的卡普依赖。我启用了数据绑定,它可以工作,并且我可以通过Android Studio运行测试(gradle task testDebugUnitTest works)。我使用嵌入式JDK。我通过使用Java8而不是Java11解决了这个问题。Java9和Java10也可能出现同样的问题。我通过导出JAVA\u HOME=/path/to/JAVA/8
设置我的JAVA\u HOME
,然后运行/gradlew build
。瞧,没有错
我遇到异常e:java.util.ServiceConfigurationError:javax.annotation.processing.Processor:android.databinding.annotationprocessor.ProcessDataBinding无法获取公共无参数构造函数和java.lang.NoClassDefFoundError:javax/xml/bind/jaxBeException
当我使用gradle从命令行运行构建时。但是当我从Android Studio运行构建时,这些并没有出现。我怀疑这是因为Android Studio不知何故使用了自己的Java版本。如果需要在Java 9+上使用数据绑定,则需要添加JAX-B依赖项。将此添加到build.gradle
的依赖项{}
块:
// 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"
}
这是因为Java版本>8
将您的JAVA_指向JAVA 8版本,它将顺利运行
Java8下载
详细的解决方案是
我之所以出现此错误,是因为我的“build.gradle”、“kotlin_版本”和“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
可能重复我使用的嵌入式JDK@WojtekOkoński这一点运气如何?不,我只是不使用此任务。本博客中给出了使用Java 8的明确解释,这是一个有效的解决方法-应用程序构建。但是,是否有可能以某种方式使用JDK11运行构建?
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