dependency-analysis-gradle-plugin icon indicating copy to clipboard operation
dependency-analysis-gradle-plugin copied to clipboard

FileNotFoundException when running running buildHealth after deleting a file

Open eygraber opened this issue 11 months ago • 3 comments

Plugin version 2.6.0

Gradle version 8.11.1

JDK version 22

(Optional) Kotlin and Kotlin Gradle Plugin (KGP) version 2.1.0

(Optional) Android Gradle Plugin (AGP) version 8.7.3

Describe the bug If I run buildHealth, then delete a file, then run buildHealth again, I get a FileNotFoundException. If I run buildHealth --no-configuration-cache then it succeeds (but running again without --no-configuration-cache continues to fail until presumably the configuration cache is invalidated).

java.io.FileNotFoundException: /home/eli/workspace/my-app/library/src/main/kotlin/com/myapp/DeviceType.kt (No such file or directory)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(FileInputStream.java:213)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:152)
        at com.autonomousapps.internal.parse.SourceListener$Companion.newSimpleParser(SourceListener.kt:39)
        at com.autonomousapps.internal.parse.SourceListener$Companion.parseSourceFileForImports(SourceListener.kt:33)
        at com.autonomousapps.tasks.SourceExploder.explode(CodeSourceExploderTask.kt:119)
        at com.autonomousapps.tasks.CodeSourceExploderTask$CodeSourceExploderWorkAction.execute(CodeSourceExploderTask.kt:87)
        at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
        at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
        at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
        at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
        at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
        at org.gradle.internal.Factories$1.create(Factories.java:31)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
        at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
        at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
        ... 5 more

eygraber avatar Dec 13 '24 09:12 eygraber

Thanks for the report. You're just deleting a normal Kotlin source file, it looks like? Is this an Android app?

autonomousapps avatar Dec 13 '24 21:12 autonomousapps

Yes, just deleted a regular Kotlin source file, and it's an Android app.

eygraber avatar Dec 15 '24 03:12 eygraber

This also happens when renaming a file.

eygraber avatar Dec 24 '24 12:12 eygraber

Is it worth adding a workaround to check for the file's existence, just so the issue stops happening, and then try and figure out the underlying cache issue later?

eygraber avatar Jun 12 '25 23:06 eygraber

In my debugging, I've discovered that this is only an issue with Android projects. JVM projects work fine without these changes. Something to do with this code.

autonomousapps avatar Sep 02 '25 19:09 autonomousapps

Yes I forgot to call that out in the PR. I was only able to get failing tests on Android.

eygraber avatar Sep 02 '25 19:09 eygraber