Оболочка Gradle отказывается загружать и использовать версию 6.7.1

В моей системе (Mac) работает Gradle 6.2.2, и мне нужно, чтобы он оставался на 6.2.2 для нескольких важных проектов, которые я запускаю локально.

Я только что клонировал другой проект, поддерживаемый другими разработчиками, которые используют Gradle 6.7.1. Это приложение Spring Boot. Когда я запускаю любую из его команд Gradle в командной строке, я получаю:

> Failed to apply plugin [id 'org.springframework.boot']
   > Spring Boot plugin requires Gradle 5 (5.6.x only) or Gradle 6 (6.3 or later). The current version is Gradle 6.2.2

Итак, похоже, Spring Boot хочет, чтобы я использовал Gradle 6.3+.

Мое понимание Gradle Wrapper (пожалуйста, поправьте меня, если я ошибаюсь):

  1. вы изменяете build.gradle с помощью директивы wrapper, которая указывает, какую версию Gradle использовать для проекта
  2. затем вы запускаете gradle wrapper в командной строке, и Gradle загружает и кэширует (где-то) эту версию Gradle для вас
  3. теперь вы можете запускать свои обычные команды Gradle, но вместо gradle вы используете gradlew, и это говорит Gradle использовать версию Gradle, указанную в директиве оболочки

Если что-то из этого неверно или вводит в заблуждение, пожалуйста, начните с исправления меня! Если предположить, что это более-менее правильно...

Я добавил следующую директиву в build.gradle проекта:

wrapper{
    gradleVersion = '6.7.1'
    distributionType = Wrapper.DistributionType.BIN
}

Я надеюсь, что хотя я использую 6.2.2 локально в своей системе, это скажет Gradle получить и использовать Gradle v6.7.1, который, как мы знаем, совместим с остальной сборкой проекта.

Затем я запускаю gradle wrapper из корня проекта в своей командной строке:

$ gradle wrapper

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/myuser/workspace/the-new-project/build.gradle' line: 27

* What went wrong:
An exception occurred applying plugin request [id: 'org.springframework.boot', version: '2.3.2.RELEASE']
> Failed to apply plugin [id 'org.springframework.boot']
   > Spring Boot plugin requires Gradle 5 (5.6.x only) or Gradle 6 (6.3 or later). The current version is Gradle 6.2.2

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

* Get more help at https://help.gradle.org

BUILD FAILED in 702ms

Есть идеи, что здесь происходит? Как указать Gradle загрузить и использовать 6.7.1, но не трогать мою локальную версию 6.2.2?


person hotmeatballsoup    schedule 20.01.2021    source источник
comment
Вы пытались запустить ./gradlew wrapper --gradle-version 6.7.1 --distribution-type bin для конкретного проекта? Обратите внимание, что это вызывает скрипт gradlew, а не ваш глобальный двоичный файл gradle.   -  person user991710    schedule 21.01.2021


Ответы (1)


Ваше понимание обертки правильное (хотя для пункта 1 вы также можете указать версию и тип в командной строке или полагаться на значения по умолчанию, опуская их).

Если проект еще не использует скрипты-оболочки (в корне проекта нет файла gradlew), вам необходимо вручную загрузить совместимая версия дистрибутива. Используйте это для создания сценария-оболочки, а затем с этого момента всегда используйте gradlew для сборки проекта. Вы можете удалить загруженный вручную файл позже, если хотите. Это не коснется старой версии, которую вы установили самостоятельно.

Если на самом деле скрипт-обертка уже есть, но он настроен на несовместимую версию, то просто вручную измените версию в файле gradle/wrapper/gradle-wrapper.properties. После этого обязательно запустите задачу wrapper, чтобы получить обновления (если таковые имеются) для фактического скрипта.

Вам также следует рассмотреть возможность использования оболочки для ваших собственных проектов, для которых требуется более старая версия 6.2.2. Таким образом, вам не нужно беспокоиться о сохранении правильной версии локально установленных дистрибутивов и ручном переключении между ними.

person Bjørn Vester    schedule 21.01.2021