Testing Gradle can';t在Windows 10上运行我的项目测试(读取executionHistory.lock时出错;多进程锁定文件)

Testing Gradle can';t在Windows 10上运行我的项目测试(读取executionHistory.lock时出错;多进程锁定文件),testing,gradle,windows-10,Testing,Gradle,Windows 10,我有一个大型Java桌面(非Android)项目,其中包含许多子模块,我最近开始尝试在Windows 10上构建和运行它。(通常我在MacOS上运行构建。) 我们在尝试运行测试时总是会出错;这个错误发生在Windows 10机器上,我和项目中的其他开发人员都是从新签出代码开始的 以下是错误: 2020-11-09T18:21:51.995-0800[INFO][org.gradle.internal.snapshot.impl.DirectorySnapshotter]无法读取文件路径“C:\U

我有一个大型Java桌面(非Android)项目,其中包含许多子模块,我最近开始尝试在Windows 10上构建和运行它。(通常我在MacOS上运行构建。)

我们在尝试运行测试时总是会出错;这个错误发生在Windows 10机器上,我和项目中的其他开发人员都是从新签出代码开始的

以下是错误:

2020-11-09T18:21:51.995-0800[INFO][org.gradle.internal.snapshot.impl.DirectorySnapshotter]无法读取文件路径“C:\Users\Me\myproject\.gradle\6.6.1\executionHistory\executionHistory.lock”。

--debug
日志中的错误之后紧接着是以下堆栈跟踪;我不知道是否相关,但每次出现上述错误后都会出现:

java.io.UncheckedIOException: Failed to create MD5 hash for file content.
        at org.gradle.internal.hash.DefaultStreamHasher.hash(DefaultStreamHasher.java:37)
        at org.gradle.internal.hash.DefaultFileHasher.hash(DefaultFileHasher.java:41)
        at org.gradle.api.internal.changedetection.state.CachingFileHasher.snapshot(CachingFileHasher.java:87)
        at org.gradle.api.internal.changedetection.state.CachingFileHasher.hash(CachingFileHasher.java:69)
        at org.gradle.api.internal.changedetection.state.SplitFileHasher.hash(SplitFileHasher.java:54)
        at org.gradle.internal.snapshot.impl.DirectorySnapshotter$PathVisitor.snapshotFile(DirectorySnapshotter.java:281)
        at org.gradle.internal.snapshot.impl.DirectorySnapshotter$PathVisitor.visitResolvedFile(DirectorySnapshotter.java:260)
        at org.gradle.internal.snapshot.impl.DirectorySnapshotter$PathVisitor.visitFile(DirectorySnapshotter.java:238)
        at org.gradle.internal.snapshot.impl.DirectorySnapshotter$PathVisitor.visitFile(DirectorySnapshotter.java:173)
        at java.base/java.nio.file.Files.walkFileTree(Files.java:2804)
        at org.gradle.internal.snapshot.impl.DirectorySnapshotter.snapshot(DirectorySnapshotter.java:73)
        at org.gradle.internal.vfs.impl.DefaultVirtualFileSystem.snapshot(DefaultVirtualFileSystem.java:146)
        at org.gradle.internal.vfs.impl.DefaultVirtualFileSystem.lambda$readLocation$15(DefaultVirtualFileSystem.java:166)
        at java.base/java.util.Optional.orElseGet(Optional.java:362)
        at org.gradle.internal.vfs.impl.DefaultVirtualFileSystem.lambda$readLocation$16(DefaultVirtualFileSystem.java:166)
        at org.gradle.internal.vfs.impl.DefaultVirtualFileSystem$StripedProducerGuard.guardByKey(DefaultVirtualFileSystem.java:203)
        at org.gradle.internal.vfs.impl.DefaultVirtualFileSystem.lambda$readLocation$17(DefaultVirtualFileSystem.java:165)
        at java.base/java.util.Optional.orElseGet(Optional.java:362)
        at org.gradle.internal.vfs.impl.DefaultVirtualFileSystem.readLocation(DefaultVirtualFileSystem.java:165)
        at org.gradle.internal.vfs.impl.DefaultVirtualFileSystem.read(DefaultVirtualFileSystem.java:64)
        at org.gradle.internal.vfs.RoutingVirtualFileSystem.read(RoutingVirtualFileSystem.java:53)
        at org.gradle.internal.fingerprint.impl.DefaultFileCollectionSnapshotter$SnapshottingVisitor.visitCollection(DefaultFileCollectionSnapshotter.java:61)
        at org.gradle.api.internal.file.AbstractOpaqueFileCollection.visitContents(AbstractOpaqueFileCollection.java:55)
        at org.gradle.api.internal.file.AbstractFileCollection.visitStructure(AbstractFileCollection.java:326)
        at org.gradle.api.internal.file.CompositeFileCollection.lambda$visitContents$0(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.collections.UnpackingVisitor.visitSingleFile(UnpackingVisitor.java:108)
        at org.gradle.api.internal.file.collections.UnpackingVisitor.add(UnpackingVisitor.java:103)
        at org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection$UnresolvedItemsCollector.visitContents(DefaultConfigurableFileCollection.java:380)
        at org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.visitChildren(DefaultConfigurableFileCollection.java:292)
        at org.gradle.api.internal.file.CompositeFileCollection.visitContents(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.AbstractFileCollection.visitStructure(AbstractFileCollection.java:326)
        at org.gradle.api.internal.file.CompositeFileCollection.lambda$visitContents$0(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.UnionFileCollection.visitChildren(UnionFileCollection.java:78)
        at org.gradle.api.internal.file.CompositeFileCollection.visitContents(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.AbstractFileCollection.visitStructure(AbstractFileCollection.java:326)
        at org.gradle.api.internal.file.CompositeFileCollection.lambda$visitContents$0(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.UnionFileCollection.visitChildren(UnionFileCollection.java:78)
        at org.gradle.api.internal.file.CompositeFileCollection.visitContents(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.AbstractFileCollection.visitStructure(AbstractFileCollection.java:326)
        at org.gradle.api.internal.file.CompositeFileCollection.lambda$visitContents$0(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.UnionFileCollection.visitChildren(UnionFileCollection.java:78)
        at org.gradle.api.internal.file.CompositeFileCollection.visitContents(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.AbstractFileCollection.visitStructure(AbstractFileCollection.java:326)
        at org.gradle.api.internal.file.CompositeFileCollection.lambda$visitContents$0(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.collections.UnpackingVisitor.add(UnpackingVisitor.java:61)
        at org.gradle.api.internal.file.collections.UnpackingVisitor.add(UnpackingVisitor.java:86)
        at org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection$UnresolvedItemsCollector.visitContents(DefaultConfigurableFileCollection.java:380)
        at org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.visitChildren(DefaultConfigurableFileCollection.java:292)
        at org.gradle.api.internal.file.CompositeFileCollection.visitContents(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.AbstractFileCollection.visitStructure(AbstractFileCollection.java:326)
        at org.gradle.api.internal.file.CompositeFileCollection.lambda$visitContents$0(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.collections.UnpackingVisitor.add(UnpackingVisitor.java:61)
        at org.gradle.api.internal.file.collections.UnpackingVisitor.add(UnpackingVisitor.java:86)
        at org.gradle.api.internal.file.DefaultFileCollectionFactory$ResolvingFileCollection.visitChildren(DefaultFileCollectionFactory.java:310)
        at org.gradle.api.internal.file.CompositeFileCollection.visitContents(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.AbstractFileCollection.visitStructure(AbstractFileCollection.java:326)
        at org.gradle.api.internal.file.CompositeFileCollection.lambda$visitContents$0(CompositeFileCollection.java:119)
        at org.gradle.api.internal.tasks.PropertyFileCollection.visitChildren(PropertyFileCollection.java:48)
        at org.gradle.api.internal.file.CompositeFileCollection.visitContents(CompositeFileCollection.java:119)
        at org.gradle.api.internal.file.AbstractFileCollection.visitStructure(AbstractFileCollection.java:326)
        at org.gradle.internal.fingerprint.impl.DefaultFileCollectionSnapshotter.snapshot(DefaultFileCollectionSnapshotter.java:50)
        at org.gradle.internal.fingerprint.impl.AbstractFileCollectionFingerprinter.fingerprint(AbstractFileCollectionFingerprinter.java:47)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.lambda$visitInputFileProperties$1(ExecuteActionsTaskExecuter.java:327)
        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:325)
        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)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:409)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:399)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:242)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:150)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:94)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.internal.execution.steps.BuildOperationStep.operation(BuildOperationStep.java:37)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.captureExecutionStateOp(CaptureStateBeforeExecutionStep.java:103)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$execute$0(CaptureStateBeforeExecutionStep.java:78)
        at java.base/java.util.Optional.map(Optional.java:258)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:78)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
        at java.base/java.util.Optional.orElseGet(Optional.java:362)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
        at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:195)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:187)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:114)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:409)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:399)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:242)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:150)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:94)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
        at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.io.IOException: The process cannot access the file because another process has locked a portion of the file
        at java.base/java.io.FileInputStream.readBytes(Native Method)
        at java.base/java.io.FileInputStream.read(FileInputStream.java:249)
        at org.gradle.internal.hash.DefaultStreamHasher.doHash(DefaultStreamHasher.java:52)
        at org.gradle.internal.hash.DefaultStreamHasher.hash(DefaultStreamHasher.java:35)
        ... 124 more
我还看到有关读取其他文件的错误:

2020-11-09T18:21:51.998-0800[INFO][org.gradle.internal.snapshot.impl.DirectorySnapshotter]无法读取文件路径“C:\Users\Me\myproject\.gradle\6.6.1\fileContent\fileContent.lock”。

(上面是关于MD5散列和锁定文件一部分的某些其他进程的一对相同的异常)

2020-11-09T18:21:52.029-0800[INFO][org.gradle.internal.snapshot.impl.DirectorySnapshotter]无法读取文件路径“C:\Users\Me\myproject\.gradle\6.6.1\fileHashes\fileHashes.lock”。

(相同)

请注意,整个项目在Windows 10上正确构建和运行。这只是运行测试时出现的问题。但是我很想解决这个问题,这样Windows开发者就可以运行它们了

我试过以下方法,但都不奏效

  • 在不同机器上重新检查项目
  • 删除项目的
    .gradle
    文件夹并清理重建
  • 牺牲一只非常小的山羊
起初我认为错误可能是由一些失败的测试(我有一些集成测试没有在Windows 10上运行)引起的,但在禁用这些测试后,我(和我的队友)仍然会收到错误

请注意,在Docker容器内构建时,提出了一个非常类似的问题:

但是,我们不是在Docker容器中构建,上面的解决方案对我们不起作用。我正在Mac OS Catalina主机上构建一个VirtualBox Windows 10来宾虚拟机,我的队友也看到了这个错误,他正在构建一台Windows 10笔记本电脑。这里没有码头工人


我欢迎关于如何帮助进一步诊断这个问题的想法。请注意,由于项目的规模和古老性,试图将其缩小到一个小样本复制案例是不切实际的。

我也遇到了同样的问题,并用

这里的问题是目标目录包含.gradle目录,该目录由初始gradle进程使用,因此在Windows中被锁定。然后守护进程尝试散列lockfile,因为它散列目标目录中的所有文件以检查任务是否是最新的,但由于它是一个lockfile,因此任何其他进程都无法访问它。 解决方案是将任务的输出目录设置为一个文件夹,在该文件夹中它不能干扰任何锁定的文件

总而言之,您可以使用如下标志运行gradlew来解决您的问题:

--project-cache-dir=../cache

我也遇到了同样的问题,并用

这里的问题是目标目录包含.gradle目录,该目录由初始gradle进程使用,因此在Windows中被锁定。然后守护进程尝试散列lockfile,因为它散列目标目录中的所有文件以检查任务是否是最新的,但由于它是一个lockfile,因此任何其他进程都无法访问它。 解决方案是将任务的输出目录设置为一个文件夹,在该文件夹中它不能干扰任何锁定的文件

总而言之,您可以使用如下标志运行gradlew来解决您的问题:

--project-cache-dir=../cache

这回答了你的问题吗?这回答了你的问题吗?