Gradle无法使用BuildScopeServices.createInitScriptHandler()创建InitScriptHandler类型的服务

Edg*_*rka 40 gradle

我在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.
Run Code Online (Sandbox Code Playgroud)

Aru*_*gal 37

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

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

我的Gradle版本是2.3.

使用--stacktrace,我开始知道它正在尝试创建.gradle用于存储Gradle缓存数据的文件夹(当我调用Gradle在slave上运行清理任务时)它正在尝试在/ some/location/where/gradle下创建该文件夹/ exists OR some/path/location/xxx/yyy其中从属机器上运行Gradle的用户没有有效的写入权限(创建文件夹/文件).

即这是我用来从詹金斯机连接到从没有写权限的用户touch/ mkdir在默认位置的任何(其中摇篮就想,好吧,我应该在这里创建.gradle文件夹).

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

在此输入图像描述

设置:

GRADLE_USER_HOME=~/gradle_2_3_cache/.gradle
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.

您也可以将其设置为〜/ .gradle.但是我将它设置在我的~主目录(gradle_2_3_cache)中的自定义文件夹下.这将帮助我,以防我有另一个奴隶运行在同一个Slave机器上,但是对于ex 2.5等版本有不同的Gradle版本,如果我想.gradle在单独的文件夹中使用2.3和2.5/x版本的缓存.


小智 21

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

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

小智 9

通过简单地使用"sudo"并提供访问gradle以创建文件夹和写入缓存来解决问题.使用:

sudo ./gradlew
Run Code Online (Sandbox Code Playgroud)

  • 这可能有效,但并不安全。如果构建脚本疯狂运行(由于恶意或粗心),它可能会损坏其运行的系统。它还会通过使用超级用户 ID 创建构建输出来增加常规用户/超级用户问题。 (2认同)

小智 7

我有同样的问题.对我来说,如果你不能删除尝试重命名,我排除.gradle文件夹后就可以了.

  • 以root身份意外运行gradle会将PROJECT / .gradle的所有者设置为root。修复权限的工作,谢谢。 (2认同)

小智 7

如果使用wrapper gradlew,请在根make目录.gradle_new中

mkdir .gradle_new
chmod -R 777 .gradle_new
Run Code Online (Sandbox Code Playgroud)

并使用参数运行gradlew:

--project-cache-dir .gradle_new
Run Code Online (Sandbox Code Playgroud)


jmo*_*ico 6

权限问题。这为我解决了这个问题:

sudo chown -R $USER dir


YaB*_*eep 5

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

  • 这应该是任何stackoverflow问题之前的第一种方法:P (3认同)

Fli*_*lic 5

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

gradle wrapper --gradle-version <new-version-number>
Run Code Online (Sandbox Code Playgroud)

例如 gradle wrapper --gradle-version 4.10.2

当然,这假设您的Gradle安装是最新的。如果没有,您将要先对其进行更新。