繁体   English   中英

Windows 10 上的 gradle 测试:无法读取文件内容:executionHistory.lock

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM