首页 > 解决方案 > Android Jacoco Instrumentation 因 JDK11 的 IllegalArgumentException 而失败

问题描述

我正在尝试将包含大量模块的庞大 Android 项目更新到 JDK 11。当我尝试运行构建时,出现大量失败并出现上述异常并显示以下消息:

> Unable to instrument file with Jacoco: file= /../<FileName>.class
  > Error while instrumenting class SerializableChange(file=/../<FileName>)

我试图检查 jacoco 库中的 Instrumenter.java 类,但找不到非法参数异常是什么。

我还尝试使用 --debug 和 --stacktrace 选项运行,但由于代码库非常庞大,构建在运行几个小时后中止。

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':photo:jacocoDebug'.    
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$3(ExecuteActionsTaskExecuter.java:186)  
•••
Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.tasks.JacocoTask$InstrumentDirAction  
at org.gradle.workers.internal.DefaultWorkerExecutor$WorkItemExecution.waitForCompletion(DefaultWorkerExecutor.java:336)    
•••
Caused by: java.io.UncheckedIOException: Unable to instrument file with Jacoco: file=/opt/devops/workspace/Android_OpenJDK_11/andrcore/photo/build/tmp/kotlin-classes/debug/com/../photo/FileName.class, fileStatus=NEW, normalizedPath=com/../photo/FileName.class 
at com.android.build.gradle.internal.tasks.JacocoTask$InstrumentDirAction.execute(JacocoTask.java:304)  
•••

Caused by: java.io.IOException: Error while instrumenting class SerializableChange(file=/opt/devops/workspace/Android_OpenJDK_11/andrcore/photo/build/tmp/kotlin-classes/debug/com/../photo/FileName.class, fileStatus=NEW, normalizedPath=com/../photo/FileName.class).    
at org.jacoco.core.instr.Instrumenter.instrumentError(Instrumenter.java:166)    
•••
at com.android.build.gradle.internal.tasks.JacocoTask$InstrumentDirAction.execute(JacocoTask.java:298)  
•••
Caused by: java.lang.IllegalArgumentException: (No message provided)    
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:185)   
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:168)   
at org.jacoco.core.instr.Instrumenter.instrument(Instrumenter.java:114) 
at org.jacoco.core.instr.Instrumenter.instrument(Instrumenter.java:136) 
at com.android.build.gradle.internal.tasks.JacocoTask$InstrumentDirAction.execute(JacocoTask.java:298)  
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63) 
at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:49)    
at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:43)    
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)  
at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:43)    
at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49) 
at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30) 
at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:85)   
at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:55)   
at org.gradle.process.internal.worker.request.WorkerAction$1.call(WorkerAction.java:138)    
at org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41)    
at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:135)   
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)   
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)   
at java.lang.reflect.Method.invoke(Method.java:566) 
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) 
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) 
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) 
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) 
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)  
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)   
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)    
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)  
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)  
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)    
at java.lang.Thread.run(Thread.java:829)

非常感谢任何帮助。

似乎很少有其他人也有这个问题,并且觉得在这里添加一个链接https://github.com/gradle/gradle/issues/18719相关。

标签: androidgradlejacocobuild-erroropenjdk-11

解决方案


推荐阅读