Как/когда создавать Gradle файлы-обертки?
Я пытаюсь понять, как работает Wrapper Gradle. Во многих исходных репозиториях я вижу следующую структуру:
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
?
Ответы
Ответ 1
Вы генерируете его один раз и снова, когда хотите изменить версию 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
Все подробности можно найти здесь here
.Из Gradle 3.1
--distribution-type
также можно использовать опцию. Опции бинарные и все и бин. все дополнительно содержит исходный код и документацию. все также лучше, когда используется IDE, поэтому редактор работает лучше. Недостатком является то, что сборка может длиться дольше (нужно загружать больше данных, бессмысленно на CI-сервере), и это займет больше места.
Это файлы Gradle Wrapper. Вам нужно сгенерировать их один раз (для конкретной версии) и добавить в систему контроля версий. Если вам нужно изменить версию Gradle Wrapper, измените версию в build.gradle
, см. (1.) и восстановите файлы.
Приведите подробный пример. Такой файл может иметь несколько целей: многомодульный проект, разделение ответственности, слегка измененный сценарий и т.д.
settings.gradle
отвечает скорее за структуру проекта (модули, имена и т.д.), Тогда как gradle.properties
используется для внешних деталей проекта и Gradle (версия, аргументы командной строки -XX
, свойства и т.д.)
Ответ 2
Создание 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 есть возможности для импорта старых проектов, которые также могут помочь.
Ответ 3
Как и в случае с Gradle 2.4, вы можете использовать gradle wrapper --gradle-version X.X
для настройки конкретной версии оболочки Gradle без добавления каких-либо задач в ваш файл build.gradle
. В следующий раз, когда вы используете оболочку, он загрузит соответствующий дистрибутив Gradle для соответствия.
Ответ 4
Если вы хотите загрузить gradle с исходным кодом и документами, URL-адрес распространения по умолчанию, настроенный в gradle -wrapper.properites, не будет удовлетворять ваши потребности. Это https://services.gradle.org/дистрибутивы/gradle -2.10-bin.zip, не https://services.gradle.org/distributions/gradle -2.10-all.zip. Этот полный URL-адрес предложенный IDE, такой как Android Studio.Если вы хотите загрузить полный gradle, вы можете настроить задачу обертки следующим образом:
task wrapper(type: Wrapper) {
gradleVersion = '2.13'
distributionUrl = distributionUrl.replace("bin", "all")
}
Ответ 5
Это команда, чтобы использовать Gradle для обновления оболочки таким образом, чтобы она захватывала дистрибутивные версии библиотек, которые включают исходный код:
./gradlew wrapper --gradle-version <version> --distribution-type all
Задание типа распределения "all" гарантирует, что Gradle загружает исходные файлы для использования в вашей среде разработки.
Pros
- IDE будут иметь непосредственный доступ к исходному коду. Например, Intellij IDEA не предложит вам обновить скрипты сборки, чтобы включить исходный дистрибутив (поскольку эта команда уже сделала это)
против
- Более длинный/большой процесс сборки, поскольку он загружает исходный код. Это пустая трата времени/места на сервере сборки или CI, где исходный код не нужен.
Прокомментируйте или укажите другой ответ, если вы знаете какой-либо параметр командной строки, чтобы сообщить Gradle не загружать источники на сервере сборки.
Ответ 6
-
Вы будете генерировать их один раз, но обновите их, если вам нужна новая функция или что-то из плагина, который, в свою очередь, нуждается в более новой версии 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
настраивает переменные resusable для ваших файлов gradle, если вам нравится, и вы чувствуете, что они будут более ясными.
Ответ 7
Поскольку встроенные задачи Gradle устарели в 4.8, попробуйте ниже
wrapper {
gradleVersion = '2.0' //version required
}
и беги
gradle wrapper