java - Gradle clean无法删除依赖jar

标签 java gradle

我有一个多模块 Gradle 4.4 项目 - 有一个父 build.gradle 和两个子 Gradle 项目,每个项目都有自己的 build.gradle。两者都是 Java 项目(一个用于开发代码,另一个用于 QA)。开发项目是 QA 项目的依赖项(我在 QA 项目的 build.gradle 中有 testCompile project(':dev-project'))。否则,build.gradle 文件中没有任何有趣或异常的地方 - 它们导入 java 插件和 com.github.johnrengelman.shadow

如果我尝试连续两次构建父项目(没有打开 IDE,在没有管理员权限的情况下从 Git Bash 运行 ./gradlew clean build),构建会失败:

09:55:24.449 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Completing Build operation 'Execute clean for :dev-project:clean'
09:55:24.449 [DEBUG] [org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter] Removed task artifact state for {} from context.
09:55:24.450 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':dev-project:clean'
09:55:24.450 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger] :dev-project:clean FAILED
09:55:24.451 [WARN] [org.gradle.api.Project] :dev-project:clean took 1587ms
09:55:24.451 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Completing Build operation 'Task :dev-project:clean'
09:55:24.451 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'Task :dev-project:clean' completed
09:55:24.452 [INFO] [org.gradle.execution.taskgraph.DefaultTaskPlanExecutor] :dev-project:clean (Thread[Task worker for ':',5,main]) completed. Took 1.588 secs.
09:55:24.452 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1.14 completed (1 worker(s) in use)
09:55:24.452 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Task worker for ':': released lock on root.1.14
09:55:24.452 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Task worker for ':': released lock on :
09:55:24.452 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskPlanExecutor] Task worker [Thread[Task worker for ':',5,main]] finished, busy: 1.588 secs, idle:     0.002 secs
09:55:24.453 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskPlanExecutor] Task worker [Thread[Daemon worker Thread 3,5,main]] finished, busy: 0.0 secs, idle:     1.59 secs
09:55:24.453 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskPlanExecutor] Task worker [Thread[Task worker for ':' Thread 2,5,main]] finished, busy: 0.0 secs,     idle: 1.591 secs
09:55:24.454 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskPlanExecutor] Task worker [Thread[Task worker for ':' Thread 3,5,main]] finished, busy: 0.0 secs,     idle: 1.592 secs
09:55:24.455 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Completing Build operation 'Run tasks'
09:55:24.456 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
09:55:24.456 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.
09:55:24.456 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
09:55:24.456 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:
09:55:24.456 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Execution failed for task 'dev-project:clean'.
09:55:24.456 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > Unable to delete file:     C:\workspace\parent-project\dev-project\libs\dev-project-0.1.0.jar
09:55:24.457 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
09:55:24.457 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Try:
09:55:24.457 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]  Run with --scan to get full insights.
09:55:24.457 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
09:55:24.457 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Exception is:
09:55:24.457 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException: Execution failed for task     ':dev-project:clean'.
09:55:24.457 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(    ExecuteActionsTaskExecuter.java:100)
09:55:24.457 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(    ExecuteActionsTaskExecuter.java:70)
09:55:24.458 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at     org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
09:55:24.458 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(    SkipUpToDateTaskExecuter.java:62)

我怀疑 dev-project JAR 无法删除,因为它被 QA 项目所依赖,因此 Gradle 对它保持某种锁定。

如果在 Windows 任务管理器中删除 Java(TM) Platform SE Binary 进程,我可以成功构建,但我希望它是自动的。

最佳答案

此错误是由 Gradle 守护进程引起的 - 它在构建完成后在后台保持运行,并且由于某种原因锁定了 dev-project jar。

org.gradle.daemon=false 添加到我的全局 gradle.properties 文件中已经解决了该问题,尽管代价是构建速度稍慢。

我有raised an issue与 Gradle 团队合作,如果有任何内容,我们将更新此答案。

关于java - Gradle clean无法删除依赖jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56252545/

相关文章:

java - 使用批处理 DataFlow 作业中数据中存在的日期写入日期分区的 bigQuery

java - 如何使用 Struts 2 提供静态资源(图像、CSS 等)?

gradle - 如何在编写目标时使用/引用 gradle 插件属性?

java - Gradle 刷新删除构建路径中的源文件夹

gradle - 如何从 gradle 运行 gradle 脚本

java - 矩阵乘法java 1.8

java检查日期是否是本月的第一个星期日

java - 如何使用 java 将图像插入到 openoffice writer 文档中?

spring-boot - Gerrit-错误:在文件Gradle/wrapper/gradle-wrapper.jar中找到回车符(CR)

maven - 如何将 gradle 中的 groovy 任务转换为 Gradle Kotlin DSL 以生成 pom.xml?