【问题标题】:Gradle Could not create service of type InitScriptHandler using BuildScopeServices.createInitScriptHandler()Gradle 无法使用 BuildScopeServices.createInitScriptHandler() 创建 InitScriptHandler 类型的服务
【发布时间】:2015-06-15 08:26:41
【问题描述】:

我在 Centos 7 终端中使用了 gradle build 命令并得到了输出:

FAILURE: Build failed with an exception.

* What went wrong:
Could not create service of type InitScriptHandler using BuildScopeServices.createInitScriptHandler().

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

【问题讨论】:

  • 您是否有适当的权限来运行该命令?
  • 我认为你是对的,问题出在权限上,因为在 root 用户中 gradle 工作正常,我尝试使用命令 chmod -R 777 ./gradle-2.4 将 777 权限设置为 gradle 文件夹,但错误仍然存​​在发生。我在用户主目录中解压缩的 Gradle 文件夹,我收到上述错误。
  • 在我输入的命令前面插入sudo 修复了这个问题。在这方面,错误消息可能会更有帮助。
  • 在我杀死 gradle daemon 时为我工作。

标签: gradle


【解决方案1】:

尝试将您的 GRADLE_USER_HOME 变量设置为您具有有效访问权限的文件夹。那么这个错误就会消失。

例如:我今天在一台新的从机上运行 gradle clean 命令时遇到了同样的问题。

我的 Gradle 版本是 2.3。

通过 --stacktrace,我知道它正在尝试创建 .gradle 文件夹来存储 Gradle 的缓存数据(当我调用 Gradle 在从站上运行清理任务时)并且它试图在 /some/location/where/gradle/exists 或某些 /path/location/xxx/yyy 在从属计算机上运行 Gradle 的用户没有有效的写入权限(创建文件夹/文件) .

即我用来从 Jenkins 机器连接到从机的用户在默认位置(Gradle 认为,好的,我应该在这里创建 .gradle 文件夹)没有对 touch/mkdir 任何内容的写入权限。

为了解决这个问题,我在 slave 的 ENVIRONMENT Variable 部分添加了上面的 GRADLE_USER_HOME 变量。现在,因为我在我的主目录中有有效的访问权限,所以我没问题。

设置:

GRADLE_USER_HOME=~/gradle_2_3_cache/.gradle

解决了这个问题。

您也可以将其设置为 ~/.gradle。但我将它设置在我的 ~ 主目录 (gradle_2_3_cache) 内的自定义文件夹下。如果我在同一台 Slave 机器上运行另一个作业/构建运行,但使用不同的 Gradle 版本,例如:2.5 等版本,并且如果我想要 2.3 和 2.5/x 版本的 .gradle 缓存在单独的文件夹中,这将对我有所帮助.

注意:当在Jenkinsfile 中使用parallel 部分时,最好避免使用Gradle 的强大功能(即使用相同的Gradle 缓存,即使用相同的GRADLE_USER_HOME),否则,您将进入矿井此处列出的有趣问题:Jenkins - java.lang.IllegalArgumentException: Last unit does not have enough valid bits & Gradle error: Task 'null' not found in root project

【讨论】:

  • 您能否详细解释一下。因为我也面临这个问题。我是 Android 中的新蜜蜂。
  • 什么是从属环境部分?
  • 因此,当您将一个从属连接到 Jenkins 主控时,它会显示为节点之一(在詹金斯术语中)。在该节点的配置中,您可以为 GRADLE_USER_HOME 添加一个 ENV 变量并使用 Gradle 的位置设置值(如上所示)
  • 见上面的图片快照。
  • @Jose 请参阅上面的附加图像快照。您现在应该开始研究“Jenkinsfile”概念。了解它是什么以及如何使用它来完成上述操作。以后会更好地帮助你。
【解决方案2】:

对我来说,杀死 Gradle 守护进程 (gradle --stop) 确实有助于解决问题。

【讨论】:

  • 同样,我的磁盘已满,但即使腾出更多空间,它仍然无法工作,因为 Gradle 守护进程由于某种原因没有收到消息。
  • 这里与包装器相同:./gradlew --stop。谢谢!
【解决方案3】:

通过简单地使用“sudo”并授予对 gradle 的访问权限以创建文件夹和写入缓存来解决问题。使用:

sudo ./gradlew

【讨论】:

  • 这可能有效,但并不安全。如果构建脚本运行异常(通过恶意或粗心),它可能会损坏它正在运行的系统。它还将通过使用超级用户的 ID 创建构建输出来增加普通用户/超级用户的问题。
【解决方案4】:

如果您使用包装器 gradlew,则在根目录中 .gradle_new

mkdir .gradle_new
chmod -R 777 .gradle_new

并使用参数运行 gradlew:

--project-cache-dir .gradle_new

【讨论】:

  • 谢谢它的工作,我刚刚授予了现有`.gradle1目录的权限
【解决方案5】:

我遇到了同样的问题。 对我来说,如果您无法删除,请在排除 .gradle 文件夹后尝试重命名。

【讨论】:

  • 以 root 身份意外运行 gradle 会将 PROJECT/.gradle 的所有者设置为 root。修复权限工作,谢谢。
【解决方案6】:

如果您刚刚更新了 JDK 版本并在项目中设置了 Gradle 包装器,您可能需要仔细检查包装器版本是否支持您的新 JDK。如果没有,请考虑从项目中删除与包装器相关的文件(gradlewgradlew.batgradle/wrapper/*)并使用 Gradle CLI 重新生成它们,如下所示:

gradle wrapper --gradle-version <new-version-number>

例如gradle wrapper --gradle-version 4.10.2

这当然假设您的 Gradle 安装是最新的。如果没有,您将需要先更新它。

【讨论】:

  • gradle 包装器的全部意义在于不依赖 gradle 安装。
  • 对于最终用户,是的。但是,您需要生成包装文件以交付给该用户。作为开发人员,在生成上述文件之前检查您的 Gradle 安装是最新的是谨慎的 - 特别是如果您在升级 JDK 后遇到错误。
  • 对我来说,删除 gradlew、gradlew.bat 和 gradle/wrapper/* 有效。之后,AndroidStudio 只是显示了一些消息并生成了丢失的文件。
【解决方案7】:

重启机器解决了这个问题。

【讨论】:

  • 这应该是任何stackoverflow问题之前的第一种方法:P
【解决方案8】:

我遇到了同样的错误,通过使用正确版本的 Java / JDK 摆脱了它。我试图用 Java 11 JDK 构建一个 Java 8 项目。检查您使用的是哪个版本的 Java JDK。

为了并行开发具有不同 Java 版本的项目,我现在使用 jEnv 来管理不同的 JDK 版本:http://www.jenv.be/

【讨论】:

    【解决方案9】:

    这是一个权限问题。 做一个 gradle wrapper --stacktrace 你应该看到这样的东西 创建目录'/home/cloud_user/my-project/gradle/wrapper'时创建父目录'/home/cloud_user/my-project/gradle'失败

    用户 cloud_user 没有目录权限 使 cloud_user 成为文件夹的所有者 sudo chown -R cloud_user:cloud_user /home/cloud_user/my-project/

    【讨论】:

      【解决方案10】:

      权限问题。这解决了我的问题

      sudo chown -R $USER dir

      【讨论】:

        【解决方案11】:

        对我来说,这与 Java 版本有关。我安装了 Java 10 并作为我系统上的默认 Java。设置指向 Java 8 的 JAVA_HOME 足以构建项目(graphql-spring-boot)。

        【讨论】:

          【解决方案12】:

          在 IntelliJ Idea 中运行代码时出现此错误,并且

          gradle --stop

          真的没有帮助,因为它说“没有 Gradle 守护程序正在运行。”

          但简单地杀死所有 gradle 进程有帮助:

          ps aux | grep gradle
          kill -9 $PID
          

          【讨论】:

            【解决方案13】:

            如果使用“调用 Gradle 脚本”构建步骤,请单击“高级”以显示其他选项。找到“强制 GRADLE_USER_HOME 使用工作空间”并勾选。

            【讨论】:

              【解决方案14】:

              供日后参考。 我遇到了同样的问题,问题是防病毒软件阻止了 OpenJdk 平台二进制文件java.exe 这阻止了 android studio 能够修改文件

              【讨论】:

                【解决方案15】:

                我在尝试构建在 VM 中作为只读文件系统挂载的项目时遇到了这个异常。该项目设置了自己的 gradle 缓存,因此更改 GRADLE_USER_HOME 不起作用。我必须将文件系统更改为读/写。

                【讨论】:

                  【解决方案16】:

                  你只需要在超级用户下运行它(sudo ....)它对我有用

                  【讨论】:

                  • 这可能有效,但并不安全。如果构建脚本运行异常(通过恶意或粗心),它可能会损坏它正在运行的系统。它还会通过使用超级用户的 ID 创建构建输出来增加普通用户/超级用户的问题。
                  【解决方案17】:

                  如果你运行 Docker-in-Docker 并将项目目录从 docker 主机直接挂载到 docker 容器:

                  -v ${PWD}:/path_to_project -w /path_to_project

                  所有者不同,docker 容器用户(gradleroot)无法覆盖/删除 ./buildSrc/build./build/

                  其中一个修复 - 将容器内的源代码复制到临时目录并在那里构建。

                  像这样(首先挂载到project,然后复制到project-copy 以与主机系统真实文件“解耦”并在副本中运行构建):

                  docker run -v "${PWD}":/home/gradle/project -w /home/gradle/project-copy \
                      --rm \
                      --entrypoint sh \
                      gradle:5.5.1-jdk11 \
                      -- -c "cp -r -T /home/gradle/project ./  &&  ./gradlew build"
                  

                  【讨论】:

                    【解决方案18】:

                    在我的情况下,我对私有 Maven 存储库的凭据不正确。 JIdea 不显示内部异常,但运行 gradle build 会立即显示问题。

                    【讨论】:

                      【解决方案19】:

                      我在 Eclipse 中使用了 Gradle 项目,Eclipse 的 Gradle 给出了该错误。当我安装 NetBeans 及其 Gradle 插件时,问题已经消失,项目构建正常。另一种规避此错误的方法是使用命令行 ./gradlew ,项目也成功构建。

                      Eclipse 的时代似乎结束了,他们似乎跟不上进度了。

                      【讨论】:

                        【解决方案20】:

                        如果您同时从不同的终端运行 Gradle 命令,可能会发生这种情况 - 我假设 Gradle 在运行时会以某种方式锁定 ~/.gradle 以防止出现任何问题。

                        【讨论】:

                          【解决方案21】:

                          我在使用 java 14 (openjdk) 作为我的默认 java 实现运行 gradle 时遇到了同样的错误。将默认 java 设置回 java 8 解决了这个问题

                          sudo update-alternatives --auto java
                          

                          【讨论】:

                            【解决方案22】:

                            只需在命令中运行 (taskkill /im java.exe /f)

                            【讨论】:

                              【解决方案23】:

                              如果有人还在为此苦苦挣扎,我的问题是由于 Microsoft 由于 Controlled Folder Access 安全限制而阻止 Java 运行引起的。

                              我没有收到弹出通知,因为我的电脑设置为请勿打扰模式。一旦我允许访问,Gradle 就运行良好。

                              【讨论】:

                                【解决方案24】:

                                在我的情况下,错误是不同的,但我来到这里,我的错误是:

                                Could not create service of type ExecutionHistoryStore using ExecutionGradleServices.createExecutionHistoryStore().
                                         > Timeout waiting to lock execution history cache (/Volumes/Extreme SSD/FlutterProject/test/android/.gradle/6.7/executionHistory). It is currently in use by another Gradle instance.
                                           Owner PID: unknown                                           
                                           Our PID: 94001                                               
                                           Owner Operation: unknown                                     
                                           Our operation:                                               
                                           Lock file: /Volumes/Extreme SSD/FlutterProject/test/android/.gradle/6.7/executionHistory/executionHistory.lock
                                

                                当您尝试从两个单独的终端运行 flutter run 时会发生这种情况。 所以我通过从我首先使用的活动终端执行cd &lt;projectPath&gt; &amp;&amp; flutter run 来解决它。 基本上,在执行一些 Gradle 命令时,在这种情况下构建一个 android 文件时,终端会锁定一些 Gradle PID,因此您要么停止它们,要么只是使用该终端。

                                【讨论】:

                                  【解决方案25】:

                                  在我的案例中,手动删除 .gradle 和 .idea 文件夹对我有帮助 如果选择了项目视图,您可以在 Android Studio 中找到它们 在此之后只需清理并重建应用程序

                                  【讨论】:

                                    【解决方案26】:

                                    我遇到了同样的问题,我在命令下工作。

                                    ./gradlew --stop
                                    

                                    之后重新启动我的系统并擦除数据模拟器并再次运行一切正常。

                                    【讨论】:

                                      猜你喜欢
                                      • 1970-01-01
                                      • 2020-05-12
                                      • 1970-01-01
                                      • 2019-06-24
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2020-10-15
                                      • 1970-01-01
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多