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