使用Parceler 1.1.13和Realm时出现Code generation did not complete successfully错误
问题复现
使用Parceler 1.1.13搭配Realm开发时,出现Parceler编译错误,错误提示为*"Code generation did not complete successfully"*。已排查确认:
- 回滚到无问题的历史代码版本,错误依然存在
- 执行IDE缓存清理重启、项目清理重建操作后,错误未解决
错误日志
error: Parceler: Code generation did not complete successfully. org.parceler.transfuse.transaction.TransactionRuntimeException: Encountered ErrorType <error>, unable to recover Parceler: Code generation did not complete successfully. at org.parceler.transfuse.adapter.element.AnnotationValueConverterVisitor.visitSimple(AnnotationValueConverterVisitor.java:159) at org.parceler.transfuse.adapter.element.AnnotationValueConverterVisitor.visitString(AnnotationValueConverterVisitor.java:101) at org.parceler.transfuse.adapter.element.AnnotationValueConverterVisitor.visitString(AnnotationValueConverterVisitor.java:40) at jdk.compiler/com.sun.tools.javac.code.Attribute$Error.accept(Attribute.java:398) at org.parceler.transfuse.adapter.element.AnnotationValueConverterVisitor.visitArray(AnnotationValueConverterVisitor.java:136) at org.parceler.transfuse.adapter.element.AnnotationValueConverterVisitor.visitArray(AnnotationValueConverterVisitor.java:40) at jdk.compiler/com.sun.tools.javac.code.Attribute$Array.accept(Attribute.java:348) at org.parceler.transfuse.adapter.element.ASTElementAnnotation.getProperty(ASTElementAnnotation.java:74) at org.parceler.internal.ParcelableAnalysis.innerAnalyze(ParcelableAnalysis.java:78) at org.parceler.internal.ParcelableAnalysis.analyze(ParcelableAnalysis.java:68) at org.parceler.internal.ParcelTransactionWorker.innerRun(ParcelTransactionWorker.java:48) at org.parceler.internal.ParcelTransactionWorker.innerRun(ParcelTransactionWorker.java:31) at org.parceler.transfuse.transaction.AbstractCompletionTransactionWorker.run(AbstractCompletionTransactionWorker.java:35) at org.parceler.transfuse.transaction.CodeGenerationScopedTransactionWorker.innerRun(CodeGenerationScopedTransactionWorker.java:47) at org.parceler.transfuse.transaction.AbstractCompletionTransactionWorker.run(AbstractCompletionTransactionWorker.java:35) at org.parceler.transfuse.transaction.ScopedTransactionWorker.run(ScopedTransactionWorker.java:55) at org.parceler.transfuse.transaction.Transaction.run(Transaction.java:77) at org.parceler.guava.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:299) at org.parceler.transfuse.transaction.TransactionProcessorPool.execute(TransactionProcessorPool.java:60) at org.parceler.transfuse.transaction.TransactionProcessorComposite.execute(TransactionProcessorComposite.java:37) at org.parceler.transfuse.transaction.TransactionProcessorChain.execute(TransactionProcessorChain.java:38) at org.parceler.internal.ParcelProcessor.execute(ParcelProcessor.java:83) at org.parceler.ParcelAnnotationProcessor.process(ParcelAnnotationProcessor.java:84) at org.gradle.api.internal.tasks.compile.processing.DelegatingProcessor.process(DelegatingProcessor.java:62) at org.gradle.api.internal.tasks.compile.processing.IsolatingProcessor.process(IsolatingProcessor.java:50) at org.gradle.api.internal.tasks.compile.processing.DelegatingProcessor.process(DelegatingProcessor.java:62) at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor.access$401(TimeTrackingProcessor.java:37) at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor$5.create(TimeTrackingProcessor.java:99) at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor$5.create(TimeTrackingProcessor.java:96) at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor.track(TimeTrackingProcessor.java:117) at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor.process(TimeTrackingProcessor.java:96) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:980) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.runContributingProcs(JavacProcessingEnvironment.java:816) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1220) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1356) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:936) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94) at org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:74) at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:94) at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57) at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:55) at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:40) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:97) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:51) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:37) at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:51) at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:37) at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:46) at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:36) at org.gradle.api.internal.tasks.compile.CleaningJavaCompiler.execute(CleaningJavaCompiler.java:53) at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory.lambda$createRebuildAllCompiler$0(IncrementalCompilerFactory.java:98) at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:61) at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:45) at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:59) at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:51) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195) at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75) at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62) at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76) at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
解决方案
从错误栈可以定位到问题出在Parceler解析@Parcel注解属性的阶段,编译器读取到了无法识别的错误类型,按以下步骤排查即可解决:
- 检查所有标注了
@Parcel注解的类,确认注解的converter、implementation等参数引用的类是否存在、是否有拼写错误,是否存在类引用缺失的问题 - 确认Realm和Parceler的版本兼容性:Parceler 1.1.13适配的Realm版本最高为6.x,若当前使用的Realm版本高于该范围,可升级Parceler到1.1.14及以上版本,或降低Realm版本适配
- 检查项目使用的JDK版本:Parceler 1.1.13不支持JDK 16及更高版本,若近期升级了JDK,可降级到JDK 8/11,或升级Parceler到适配高版本JDK的发行版
- 排查Realm实体类的Parceler配置:如果是Realm代理类序列化问题,需要给
@Parcel注解添加implementation = RealmObject.class参数,同时配置对应的Parceler Realm适配器 - 若仍无法定位问题,可在项目根目录执行
./gradlew clean compileDebugJavaWithJavac --stacktrace获取更精准的错误定位,找到具体触发解析错误的类
内容的提问来源于stack exchange,提问作者Dr4ke the b4dass
相关产品推荐
相关产品推荐

