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

时间:2015-06-15 08:26:41

标签: 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.

25 个答案:

答案 0 :(得分:29)

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

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

我的Gradle版本是2.3。

使用--stacktrace,我开始知道它正在尝试创建.gradle文件夹来存储Gradle的缓存数据(当我调用Gradle在奴隶上运行清理任务时)它正在尝试在 / some / location / where / gradle / exists 或某些/ path / location / xxx / yyy下创建该文件夹,其中在从属计算机上运行Gradle的用户没有有效访问权限写(创建文件夹/文件)。

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

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

enter image description here

环境:

GRADLE_USER_HOME=~/gradle_2_3_cache/.gradle

解决了这个问题。

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

答案 1 :(得分:14)

对我来说,杀死Gradle守护进程(gradle --stop)确实帮助并解决了这个问题。

答案 2 :(得分:7)

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

sudo ./gradlew

答案 3 :(得分:6)

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

答案 4 :(得分:5)

如果你使用wrapper gradlew,在root make目录.gradle_new

mkdir .gradle_new
chmod -R 777 .gradle_new

并使用参数运行gradlew:

--project-cache-dir .gradle_new

答案 5 :(得分:5)

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

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

例如gradle wrapper --gradle-version 4.10.2

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

答案 6 :(得分:2)

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

sudo chown -R $USER dir

答案 7 :(得分:1)

这是一个权限问题。 做一个 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/

答案 8 :(得分:1)

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

Invoke Gradle script screenshot

答案 9 :(得分:1)

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

答案 10 :(得分:1)

重启机器即可解决问题。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我遇到了同样的错误,使用正确版本的Java / JDK消除了该错误。我试图使用Java 11 JDK构建Java 8项目。检查您使用的Java JDK版本。

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

答案 13 :(得分:0)

如果运行Docker-in-Docker并将项目目录从Docker主机直接安装到Docker容器:

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

所有者不同,并且Docker容器用户( gradle root )无法覆盖/删除./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"

答案 14 :(得分:0)

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

答案 15 :(得分:0)

就我而言,我对私有Maven存储库的凭据不正确。 JIdea不会显示内部异常,但是运行gradle build会立即发现问题所在。

答案 16 :(得分:0)

供将来参考。 我有同样的问题,问题是防病毒软件阻止了 OpenJdk平台二进制文件 java.exe ,导致android工作室无法修改文件

答案 17 :(得分:0)

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

看来Eclipse的时代已经过去,他们似乎无法跟上进度。

答案 18 :(得分:0)

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

答案 19 :(得分:0)

当使用Java 14(openjdk)作为我的默认Java实现运行gradle时,我遇到了相同的错误。将默认Java设置回Java 8解决了该问题

sudo update-alternatives --auto java

答案 20 :(得分:0)

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

gradle --stop

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

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

ps aux | grep gradle
kill -9 $PID

答案 21 :(得分:0)

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

答案 22 :(得分:0)

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

enter image description here

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

答案 23 :(得分:0)

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

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 <projectPath> && flutter run 来解决它。 基本上,在执行一些 Gradle 命令时,在这种情况下构建一个 android 文件,终端会锁定一些 Gradle PID,所以你要么停止它们,要么只是简单地使用该终端。

答案 24 :(得分:0)

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

enter image description here