[英]gradle test on Windows 10: Couldn't read file content: executionHistory.lock
我有一个多子模块项目,我最近开始在 Windows 10 上构建(通常我在 MacOS 上构建/运行。)。 在 Windows 上,对一个特定模块的测试失败并显示以下错误:
Couldn't read file content: 'C:\\Users\\Me\\myproject\\.gradle\\6.7.1\\executionHistory\\executionHistory.lock'.
我已经使用--scan
运行,它在构建扫描中告诉我同样的事情。
Gradle 6.7.1 和 Gradle 6.6.1 都会发生这种情况。
它既发生在我身上(在 VirtualBox、Mac 主机上的 Windows 10 来宾 VM 上),也发生在本机运行带有 Windows 10 的笔记本电脑的队友身上。
我们没有使用 Docker。 还有另一个问题看起来与这个问题非常相似,但它不是同一个问题。
来自构建系统的完整堆栈跟踪并不是很有启发性; 这是相关的位:
Caused by: java.lang.RuntimeException: Couldn't read file content: 'C:\msys64\home\Me\myproject\.gradle\6.7.1\executionHistory\executionHistory.lock'.
at org.gradle.internal.fingerprint.classpath.impl.ClasspathFingerprintingStrategy$ClasspathContentFingerprintingVisitor.visitFile(ClasspathFingerprintingStrategy.java:167)
at org.gradle.internal.snapshot.MissingFileSnapshot.accept(MissingFileSnapshot.java:57)
at org.gradle.internal.snapshot.CompleteDirectorySnapshot.accept(CompleteDirectorySnapshot.java:65)
at org.gradle.internal.snapshot.CompleteDirectorySnapshot.accept(CompleteDirectorySnapshot.java:65)
at org.gradle.internal.snapshot.CompleteDirectorySnapshot.accept(CompleteDirectorySnapshot.java:65)
at org.gradle.internal.snapshot.CompleteDirectorySnapshot.accept(CompleteDirectorySnapshot.java:65)
at org.gradle.internal.fingerprint.classpath.impl.ClasspathFingerprintingStrategy.collectFingerprints(ClasspathFingerprintingStrategy.java:119)
at org.gradle.internal.fingerprint.impl.DefaultCurrentFileCollectionFingerprint.from(DefaultCurrentFileCollectionFingerprint.java:48)
at org.gradle.internal.fingerprint.impl.AbstractFileCollectionFingerprinter.fingerprint(AbstractFileCollectionFingerprinter.java:48)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.lambda$visitInputFileProperties$1(ExecuteActionsTaskExecuter.java:319)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$fingerprintInputFiles$3(CaptureStateBeforeExecutionStep.java:192)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.visitInputFileProperties(ExecuteActionsTaskExecuter.java:317)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.fingerprintInputFiles(CaptureStateBeforeExecutionStep.java:188)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.captureExecutionState(CaptureStateBeforeExecutionStep.java:150)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$captureExecutionStateOp$1(CaptureStateBeforeExecutionStep.java:104)
at org.gradle.internal.execution.steps.BuildOperationStep$1.call(BuildOperationStep.java:40)
这个问题可以可靠地重现,但它是一个相当大的项目,创建一个小的重现案例是不切实际的。
我已经尝试了所有显而易见的事情:干净的源代码检出,干净的重建,完全破坏所有 gradle 缓存等。鉴于每个人都在检查我的代码库并尝试在 Windows 上构建它,我怀疑这是一个 Gradle 错误:Gradle 无法读取自己的内部跟踪文件。
我能想到的唯一异常是我在失败的模块中使用了 JUnit 4,在其他一些(但不是全部)模块中使用了 JUnit 5。 一些使用 JUnit 4 的模块通过了测试。
关于这个问题的任何建议或见解?
我可以在 Gradle 6.7.1 中使用一个非常简单的 gradle 构建来重现它,如下所示:
目录:
gradle_test/
build.gradle
Main.java
构建.gradle:
apply plugin: "java"
task simple(type: JavaCompile) {
source = "Main.java"
classpath = files(".")
destinationDirectory = file("build")
}
错误:
> Task :simple FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':simple'.
> Couldn't read file content: 'D:\gradle_test\.gradle\6.7.1\executionHistory\executionHistory.lock'.
我不能保证这是您遇到的情况,但在我的示例构建中,错误似乎发生了,因为构建操作本身正在遍历.gradle
文件夹以查找源文件。
将Main.java
移动到src
文件夹并相应地调整编译属性可以解决问题。
我会检查以确保您没有任何意外操作.gradle
文件夹内容的.gradle
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.