Как/когда создавать 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

  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-сервере), и это займет больше места.

  1. Это файлы Gradle Wrapper. Вам нужно сгенерировать их один раз (для конкретной версии) и добавить в систему контроля версий. Если вам нужно изменить версию Gradle Wrapper, измените версию в build.gradle, см. (1.) и восстановите файлы.

  2. Приведите подробный пример. Такой файл может иметь несколько целей: многомодульный проект, разделение ответственности, слегка измененный сценарий и т.д.

  3. 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