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)
我使用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版本。
| 归档时间: |
|
| 查看次数: |
2213 次 |
| 最近记录: |