gradle clean 失败并显示“GradleException:无法创建 Jar 文件”

mda*_*win 6 java gradle

我在 gradle 中发现了一个非常奇怪的问题。

当我运行任何命令时(请参阅下面的 clean),gradle 会失败并出现并发异常。

自从我最近的更改以来,就发生了这种情况。回滚到之前的提交效果很好。

更改太多,无法在此描述,但总而言之,我根据另一个正在运行的项目对构建进行了一些调整。当我说基于时,我的意思是我只是从其他项目复制了 build.gradle、settings.gradle 和 gradle.properties。所有更改均与 Jackson Core 相关。

$ ./gradlew clean

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'myservice'.
> java.util.concurrent.ExecutionException: org.gradle.api.GradleException: Failed to create Jar file C:\Users\me\.gradle\caches\jars-9\b868ab677410c01cf9b5a0e29a035e73\jackson-core-2.15.2.jar.
    
BUILD FAILED in 2s
Run Code Online (Sandbox Code Playgroud)

我尝试删除锁定文件,但失败了:

$ rm -rf ~/.gradle/caches/jars-9/*lock
rm: cannot remove '/c/Users/me/.gradle/caches/jars-9/jars-9.lock': Device or resource busy
Run Code Online (Sandbox Code Playgroud)

所以我运行./gradlew --stop它停止了 2 个守护进程,并且我能够删除锁定文件。但clean仍然失败并出现同样的错误。

我尝试清理.gradle项目中的目录,并且还尝试签出项目的新副本。相同的结果。

因此,尽管它看起来像是一个缓存错误,但我可以通过回滚到以前的提交(不触及缓存)来修复它,并且如果我清除缓存,则不会修复它。

出了什么问题以及如何解决?

mda*_*win 11

答案与gradle 中的错误有关。7.6.2 (?) 之前的版本无法处理多版本 jar 文件(即使用不同 Java 版本构建的多个二进制文件)。

Jackson依赖就是这样一个jar文件。这解释了为什么上一次提交始终有效,而这次提交始终失败。我从中复制配置的项目使用 gradle 8.1,这就是它在那里工作的原因。

解决方案:升级gradle。