Как / когда генерировать файлы оболочки Gradle?
Я пытаюсь понять, как работает Gradle Wrapper. Во многих репозиториях я вижу следующую структуру:
projectRoot/
src/
build.gradle
gradle.properties
settings.gradle
gradlew
gradlew.bat
gradle/
wrapper/
gradle-wrapper.jar
gradle-wrapper.properties
Мои вопросы:
- Как / когда генерируется
gradlew
/gradlew.bat
? Вы должны генерировать их только один раз, когда проект создается впервые, генерируете ли вы их каждый раз, когда вы фиксируете / выдвигаете изменения? И как они генерируются? - Тот же вопрос выше, но для
gradle/wrapper/*
файлы (gradle-wrapper.jar
а такжеgradle-wrapper.properties
)? - Иногда я вижу другие
*.gradle
файлы внутри проектаgradle
каталог. Что это за дополнительные файлы Gradle и что они представляют / делают? Пользовательские плагины? - Какая разница в свойствах, которые входят в
settings.gradle
против того, что должно быть определено внутриgradle.properties
?
10 ответов
Вы генерируете его один раз и снова, когда хотите изменить версию Gradle, которую вы используете в проекте. Там нет необходимости генерировать это так часто. Вот документы. Просто добавь
wrapper
задача дляbuild.gradle
файл и запустите эту задачу, чтобы получить структуру оболочки.Имейте в виду, что вам нужно установить Gradle для создания оболочки. Отличным инструментом для управления артефактами g-экосистемы является SDKMAN!, Чтобы создать оболочку Gradle, добавьте следующий фрагмент кода в
build.gradle
файл:task wrapper(type: Wrapper) { gradleVersion = '2.0' //version required }
и запустить:
gradle wrapper
задача. Добавьте полученные файлы в SCM (например, git), и теперь у всех разработчиков будет одна и та же версия Gradle при использовании Gradle Wrapper.
С Gradle 2.4 (или выше) вы можете настроить оболочку, не добавляя выделенную задачу:
gradle wrapper --gradle-version 2.3
или же
gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip
Все подробности можно найти здесь
Из Gradle 3.1
--distribution-type
опция также может быть использована. Опции бинарные и все и бин. все дополнительно содержит исходный код и документацию. все также лучше, когда используется IDE, поэтому редактор работает лучше. Недостатком является то, что сборка может длиться дольше (нужно загружать больше данных, бессмысленно на CI-сервере), и это займет больше места.
Это файлы Gradle Wrapper. Вам нужно сгенерировать их один раз (для конкретной версии) и добавить в систему контроля версий. Если вам нужно изменить версию Gradle Wrapper, измените версию в
build.gradle
см. (1.) и восстановить файлы.Приведите подробный пример. Такой файл может иметь несколько целей: многомодульный проект, разделение ответственности, слегка измененный сценарий и т. Д.
settings.gradle
отвечает скорее за структуру проекта (модули, имена и т. д.), аgradle.properties
используется для внешних деталей проекта и Gradle (версия, аргументы командной строки-XX
, свойства и т. д.)
Создание Gradle Wrapper
Проект сборки Gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
// Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain.
task wrapper(type: Wrapper) {
gradleVersion = '2.2'
}
// Look Google doesn't use Maven Central, they use jcenter now.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
Затем в командной строке запустите
gradle wrapper
Если вам не хватает Gradle в вашей системе, установите его или выше не будет работать. На Mac лучше всего устанавливать через Homebrew.
brew install gradle
После того, как вы успешно запустили задачу оболочки и сгенерировали gradlew
, не используйте вашу систему Gradle. Это избавит вас от многих головных болей.
./gradlew assemble
А как насчет плагинов Gradle, показанных выше?
com.android.tools.build:gradle:1.0.1
Вы должны установить последнюю версию, и вы можете проверить страницу инструментов и соответственно отредактировать версию.
Посмотрите, что генерирует Android Studio
Добавление Gradle и новейшая Android Studio резко изменили макет проекта. Если у вас более старый проект, я настоятельно рекомендую создать чистый с последней версией Android Studio и посмотреть, что Google считает стандартным проектом.
В Android Studio есть средства для импорта старых проектов, которые также могут помочь.
Начиная с Gradle 2.4, вы можете использовать gradle wrapper --gradle-version X.X
настроить конкретную версию оболочки Gradle без добавления каких-либо задач в ваш build.gradle
файл. В следующий раз, когда вы используете обертку, она загрузит соответствующий дистрибутив Gradle.
Это команда, которую нужно использовать, чтобы сказать Gradle обновить обертку так, чтобы она брала дистрибутивные версии библиотек с исходным кодом:
./gradlew wrapper --gradle-version <version> --distribution-type all
Если указать тип дистрибутива с помощью "all", Gradle загрузит исходные файлы для использования вашей средой разработки.
Плюсы:
- IDE будут иметь немедленный доступ к исходному коду. Например, Intellij IDEA не предложит вам обновить ваши сценарии сборки, чтобы включить исходный дистрибутив (потому что эта команда уже сделала это)
Минусы:
- Более длинный / большой процесс сборки, потому что он загружает исходный код. Это пустая трата времени / пространства на сервере сборки или CI, где исходный код не нужен.
Пожалуйста, прокомментируйте или предоставьте другой ответ, если вам известна какая-либо опция командной строки, чтобы сказать Gradle не загружать исходные коды на сервер сборки.
Если вы хотите скачать gradle с исходным кодом и документами, URL-адрес по умолчанию, настроенный в gradle-wrapper.properites, не удовлетворит ваши потребности. Это https://services.gradle.org/distributions/gradle-2.10-bin.zip, не https://services.gradle.org/distributions/gradle-2.10-all.zip. Этот полный URL-адрес предлагается в среде IDE, такой как Android Studio. Если вы хотите загрузить полную версию, вы можете настроить задачу-оболочку следующим образом.:
task wrapper(type: Wrapper) {
gradleVersion = '2.13'
distributionUrl = distributionUrl.replace("bin", "all")
}
Поскольку встроенные задачи gradle устарели в 4.8, попробуйте ниже
wrapper {
gradleVersion = '2.0' //version required
}
и беги
gradle wrapper
Вы создадите их один раз, но обновите их, если вам нужна новая функция или что-то из плагина, который, в свою очередь, нуждается в более новой версии Gradle.
Самый простой способ обновления: начиная с Gradle 2.2 вы можете просто скачать и извлечь полный или бинарный дистрибутив Gradle и запустить:
$ <pathToExpandedZip>/bin/gradle wrapper
Нет необходимости определять задачу, хотя вам, вероятно, нужно
build.gradle
файл.Это обновит или создаст
gradlew
а такжеgradlew.bat
обертка, а такжеgradle/wrapper/gradle-wrapper.properties
иgradle-wrapper.jar
чтобы предоставить текущую версию Gradle, завернутый.Все это часть оболочки.
Немного
build.gradle
файлы ссылаются на другие файлы или файлы в подкаталогах, которые являются подпроектами или модулями. Это становится немного сложнее, но если у вас есть один проект, вам в основном нужен один файл.settings.gradle
обрабатывает проект, модуль и другие виды имен и настроек,gradle.properties
настраивает повторно используемые переменные для ваших файлов Gradle, если вам нравится, и вы чувствуете, что они будут более понятными таким образом.
Если вы используете Gradle версии 7.3.3 или выше, все, что вам нужно сделать, это просто открыть терминал и запустить:
gradle wrapper
И все!
Это еще один синтаксис для Kotlin DSL (build.gradle.kts), протестированный с помощью Gradle 8.2:
tasks.wrapper {
gradleVersion = 8.2 // OR, for example, properties["gradle.version"] as String
networkTimeout = 60_000 // milliseconds
distributionType = Wrapper.DistributionType.ALL // Includes JavaDoc and source code
validateDistributionUrl = false
}
Затем сгенерируйте/обновите оболочку с помощью этой команды:
./gradlew wrapper
- Просто удалите папку gradle и синхронизируйте проект, он создаст полную папку gradle с папкой-оболочкой, включая:-- gradlle->wrapper->[[gradle-wrapper.jar, gradle-wrapper.properties]] -- Приятного кодирования.... .:)