Подтвердить что ты не робот

Gradle Не удалось создать службу типа InitScriptHandler, используя BuildScopeServices.createInitScriptHandler()

Я использовал команду построения градации в терминале Centos 7, и я получил результат:

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.
4b9b3361

Ответ 1

Попробуйте установить переменную GRADLE_USER_HOME в папку, к которой у вас есть действительный доступ. Тогда эта ошибка исчезнет.

Например: я столкнулся с той же проблемой сегодня, когда выполнял gradle clean на новой подчиненной машине.

Моя версия Gradle была 2.3.

С --stacktrace я узнал, что он пытается создать папку .gradle для хранения данных кэша Gradle (в то время как я вызывал Gradle для запуска чистой задачи на ведомом устройстве), и он пытался создать эту папку в /some/location/where/gradle/существует ИЛИ некоторые /path/location/xxx/yyy, где пользователь, который запускал Gradle на подчиненном компьютере, не имел действительного доступа для записи (создание папки/файлов).

то есть пользователь, которого я использовал для подключения с компьютера Jenkins к подчиненному, не имел права на запись в touch/mkdir в папке по умолчанию (где Грэдл подумал, хорошо, я должен создать папку .gradle здесь).

Чтобы исправить это, я добавил вышеупомянутую переменную GRADLE_USER_HOME в разделе ведомой переменной GRADLE_USER_HOME. Теперь, когда у меня есть действительный доступ в моем домашнем каталоге, я был в порядке.

enter image description here

Окружение:

GRADLE_USER_HOME=~/gradle_2_3_cache/.gradle

решил проблему.

Вы также можете установить его в ~/.gradle. Но я поставил его под пользовательской папкой в моем ~ домашнего каталога (gradle_2_3_cache). Это поможет мне в случае, если у меня на том же ведомом компьютере работает другой ведомый, но с другой версией Gradle для версии 2.5 и т.д., И если мне нужен кеш .gradle для версии 2.3 и 2.5/x в отдельных папках.

Ответ 2

Для меня убийство демона Gradle (gradle --stop) действительно помогло и gradle --stop проблему.

Ответ 3

Проблема решена путем простого использования "sudo" и предоставления доступа к градиенту для создания папки и записи кеша. использовать:

sudo ./gradlew

Ответ 4

У меня такая же проблема. Для меня это сработало после того, как я исключил папку.gradle, если вы не можете удалить попытку переименования.

Ответ 5

Если вы используете обертку gradlew, в корневой директории make.gradle_new

mkdir .gradle_new
chmod -R 777 .gradle_new

и запустите gradlew с аргументами:

--project-cache-dir .gradle_new

Ответ 6

Если вы только что обновили версию JDK и создали свой проект Gradle, вы можете дважды проверить версию обертки, поддерживающую ваш новый JDK. Если нет, подумайте об удалении связанных с оболочкой файлов из проекта (gradlew, gradlew.bat и gradle/wrapper/*) и повторно gradle/wrapper/* их с помощью CLI Gradle, например:

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

например, gradle wrapper --gradle-version 4.10.2

Это, конечно же, предполагает, что ваша установка Gradle обновлена. Если нет, сначала вы хотите обновить это.

Ответ 7

Рестарт машины решил проблему.

Ответ 8

Я получил ту же ошибку, избавился от нее, используя правильную версию Java/JDK. Я пытался построить проект Java 8 с помощью Java 11 JDK. Проверьте, какую версию Java JDK вы используете.

Для параллельной разработки проектов с различными версиями Java теперь я использую jEnv для управления различными версиями JDK: http://www.jenv.be/

Ответ 9

Это вопрос разрешения. сделать gradle wrapper --stacktrace вы должны увидеть что-то вроде этого Не удалось создать родительский каталог '/home/cloud_user/my-project/gradle' при создании каталога '/home/cloud_user/my-project/gradle/wrapper'

пользователь cloud_user не имеет доступа к каталогу, который делает cloud_user владельцем папки sudo chown -R cloud_user:cloud_user/home/cloud_user/my-project/

Ответ 10

Если вы используете шаг сборки "Invoke Gradle script", нажмите "Дополнительно", чтобы открыть дополнительные параметры. Найдите "Принудительно GRADLE_USER_HOME использовать рабочее пространство" и проверьте его.

Invoke Gradle script screenshot

Ответ 11

В будущем. У меня была та же проблема, проблема заключалась в том, что антивирус блокировал OpenJdk платформу двоичный и java.exe, что помешало студии Android не изменять файлы

Ответ 12

Я столкнулся с этим исключением при попытке создать проект, который был смонтирован как файловая система только для чтения в виртуальной машине. Проект установил свой собственный кеш градиента, поэтому изменение GRADLE_USER_HOME не сработало. Мне пришлось изменить файловую систему для чтения/записи.

Ответ 13

Вам просто нужно запустить его под суперпользователем (sudo....), он работает для меня

Ответ 14

Для меня это было связано с версиями Java. У меня установлена Java 10 и как Java по умолчанию в моей системе. Установка JAVA_HOME, указывающего на Java 8, была достаточной для сборки проекта (graphql-spring-boot).

Ответ 15

У меня перезагрузка компьютера работала

Ответ 16

Если вы запускаете Docker-in-Docker и монтируете каталог проекта с хоста докера непосредственно в контейнер докера:

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

владельцы разные, и пользователь контейнера докера (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"

Ответ 17

В моем случае у меня были плохие учетные данные для частного хранилища Maven. JIdea не показывает внутреннее исключение, но выполнение gradle build немедленно выявляет проблему.