Build异常:找不到符号DataBindingComponent。

5

我一直在尝试解决这个烦人的问题,但是没有任何进展。

我们的应用程序大部分类都是用Kotlin编写的,同时我们也在使用数据绑定:

apply plugin: "kotlin-kapt"  
apply plugin: 'kotlin-android'  
apply plugin: 'kotlin-android-extensions'

当尝试运行应用程序时,在构建对话框中看到多个异常,如下所示(我所说的“多个”是指超过50个):

e: .../android/app/build/generated/source/dataBinding/baseClasses/dev/debug/com/company/app/databinding/IncludeFilterHeaderTabButtonBinding.java:21: error: cannot find symbol
  protected IncludeFilterHeaderTabButtonBinding(DataBindingComponent _bindingComponent, View _root,
                                                ^
  symbol:   class DataBindingComponent
  location: class IncludeFilterHeaderTabButtonBinding

这个应用程序导入了自制的SDK,该SDK完全由Java编写,并使用数据绑定。这样做有没有任何已知的问题?

这些是主应用程序的依赖项:

implementation 'com.android.support:support-core-utils:27.1.1'  
implementation 'com.android.support:support-annotations:27.1.1'  
implementation 'com.android.support.constraint:constraint-layout:1.1.2'  
implementation 'com.android.support:appcompat-v7:27.1.1'  
implementation 'com.android.support:design:27.1.1'  
implementation 'com.android.support:cardview-v7:27.1.1'  
implementation 'com.android.support:recyclerview-v7:27.1.1'  
implementation 'com.android.support:customtabs:27.1.1'  

implementation 'com.google.android.gms:play-services-vision:12.0.1'  
implementation 'com.google.android.gms:play-services-maps:12.0.1'  

implementation 'com.afollestad.material-dialogs:core:0.9.6.0'  
implementation 'com.afollestad.material-dialogs:commons:0.9.6.0'  

implementation 'com.github.bumptech.glide:glide:4.7.1'  
kapt 'com.github.bumptech.glide:compiler:4.7.1'  
implementation 'com.github.bumptech.glide:compiler:4.7.1'  
kapt "com.android.databinding:compiler:3.1.3"

implementation 'com.squareup.okhttp3:okhttp:3.9.0'  
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'  

implementation 'com.squareup.retrofit2:retrofit:2.3.0'  
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'  
implementation 'com.squareup.retrofit2:converter-simplexml:2.3.0'  

implementation 'com.google.firebase:firebase-core:12.0.1'  
implementation 'org.simpleframework:simple-xml:2.7.+'  

implementation 'net.danlew:android.joda:2.9.9'  

implementation 'me.dm7.barcodescanner:zxing:1.9.8'  

// Home made SDK initialization per flavor and build type
implementation(name: 'appauth-1.0.2', ext: 'aar')  
mockDebugCompile(name: 'sdk-mock-debug', ext: 'aar')  
mockReleaseCompile(name: 'sdk-mock-release', ext: 'aar')  
devDebugCompile(name: 'sdk-dev-debug', ext: 'aar')  
devReleaseCompile(name: 'sdk-dev-release', ext: 'aar')  
proDebugCompile(name: 'sdk-pro-debug', ext: 'aar')  
proReleaseCompile(name: 'sdk-pro-release', 'ext': 'aar')  

// Testing
testImplementation 'junit:junit:4.12'
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// Crashlytics Kit
implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
    transitive = true
}

以下是需要的版本:

Android Studio 3.1.3
Gradle 3.1.3
Kotlin Gradle插件1.2.51

当然,我们有以上这些版本。

dataBinding {
    enabled = true
}

谢谢!

更新

添加从./gradlew build --stacktrace的输出

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:kaptDevDebugKotlin'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.GradleException: Compilation error. See log for more details
        at org.jetbrains.kotlin.gradle.tasks.TasksUtilsKt.throwGradleExceptionIfError(tasksUtils.kt:8)
        at org.jetbrains.kotlin.gradle.internal.KaptTask.compile(KaptTask.kt:124)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:780)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:747)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
        ... 29 more

更新2

我被迫检查项目中的每个文件,寻找Gradle未记录的错误...在修复了一些Java文件之后,错误从最初的“无法找到符号”变成了一个异常:

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 java.base/java.util.ServiceLoader.getConstructor(ServiceLoader.java:672)
        at java.base/java.util.ServiceLoader.access$1000(ServiceLoader.java:390)
        at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1232)
        at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1264)
        at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1299)
        at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1384)
        at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1058)
        at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1091)
        at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1082)
        at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.loadProcessors(Kapt3Extension.kt:106)
        at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:175)
        at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:93)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:97)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:107)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:84)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:374)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:64)
        at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:101)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:365)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:130)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:161)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:63)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:108)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:52)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:92)
        at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:451)
        at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:97)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:218)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.access$compileIncrementally(IncrementalCompilerRunner.kt:37)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner$compile$2.invoke(IncrementalCompilerRunner.kt:80)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:92)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.execIncrementalCompiler(CompileServiceImpl.kt:527)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.access$execIncrementalCompiler(CompileServiceImpl.kt:97)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:408)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:97)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:909)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:97)
        at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:939)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:908)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:407)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
        at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3090)
        at java.base/java.lang.Class.getConstructor0(Class.java:3295)
        at java.base/java.lang.Class.getConstructor(Class.java:2110)
        at java.base/java.util.ServiceLoader$1.run(ServiceLoader.java:659)
        at java.base/java.util.ServiceLoader$1.run(ServiceLoader.java:656)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/java.util.ServiceLoader.getConstructor(ServiceLoader.java:667)
        ... 57 more
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)
        ... 65 more

幸运的是,经过快速清理和无效/重启后,一切都回到了最初的多个异常的“正常”状态。

所以,现在我能做的就是不断检查和修复,直到没有任何错误,然后我们会看到……敬请期待。


你正在使用哪个依赖项来进行 databinding-compiler 编译? - ADM
谢谢您的回复!我已经编辑了答案,并附上了我们应用程序的完整依赖列表。 - UnaDeKalamares
这可能是由于您的布局文件中出现了一些错误。请耐心检查Gradle输出,错误消息应该会在其中某个地方出现,但它并未包含在您粘贴的内容中。应该在堆栈跟踪的上方不远处。 - hqzxzwb
谢谢回复!恐怕在gradle输出中除了多次出现的“无法找到符号DataBindingComponent”之外,没有其他额外的信息可供查找。我将手动挖掘每个xml文件,看看是否有任何未报告的错误,但老实说我不太相信会有。 - UnaDeKalamares
显示剩余2条评论
4个回答

7
终于成功了!我设法使它编译通过。这需要检查每一行代码...非常愉快的经历,我会向所有朋友推荐它。
正如outis在问题的评论中指出的(谢谢!),我不是唯一一个遇到这个有趣错误的人
我正在创建自己的答案,因为我可以继续开发。然而,我认为这还不够好。因此,我不将其标记为被接受的答案,因为编译器输出已经损坏且无法使用,它肯定会在未来困扰我的梦。 更新 最近我又遇到了这个问题,并注意到由于某种原因,在实际视图之前声明视图的id(即@+id/someview)并不意味着视图本身可以使用相同的id(如@id/someview)。据我所知,如果没有数据绑定,这个问题是不存在的...所以要小心!

很抱歉,伙计。顺便说一下,我找到了另一个解决方案!在我的情况下,不使用kapt(和依赖注入)直到那个垃圾稳定下来! - Paschalis
我采用了类似的方法。最终发现,我的一个注释被定义了两次(我正在移植一些代码,其中有几个注释文件实际上是与类似库包含的重复文件)。 - gMale

2

这真是太糟糕了,

我设法使其正常工作的方法是在本地机器上安装Java 8,从本地机器运行./gradlew

这样我就可以获得编译错误并修复它们,然后从Android Studio编译,它使用自己的java版本,不会再出现失败情况。


1
我点赞这个答案,以示团结。 - Paschalis

2
在我的情况下,当我将"kotlin-gradle-plugin"从1.5.31升级到1.6.10时,我遇到了相同的问题。
我通过按照官方文档升级到最新版本的Gradle解决了这个问题。https://developer.android.com/studio/releases/gradle-plugin#updating-gradle 在Android Studio中,转到“文件>项目结构>项目>Gradle版本”,选择最新版本的Gradle。
我认为,当我们更新"kotlin-gradle-plugin"时,其他依赖项不是最新版本时会发生这种情况。
此外,请检查您的JDK版本,您可以按照官方文档进行操作。

https://developer.android.com/studio/intro/studio-config#jdk


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接