Как / когда генерировать файлы оболочки Gradle?

Я пытаюсь понять, как работает Gradle Wrapper. Во многих репозиториях я вижу следующую структуру:

projectRoot/
    src/
    build.gradle
    gradle.properties
    settings.gradle
    gradlew
    gradlew.bat
    gradle/
        wrapper/
            gradle-wrapper.jar
            gradle-wrapper.properties

Мои вопросы:

  1. Как / когда генерируется gradlew/gradlew.bat? Вы должны генерировать их только один раз, когда проект создается впервые, генерируете ли вы их каждый раз, когда вы фиксируете / выдвигаете изменения? И как они генерируются?
  2. Тот же вопрос выше, но для gradle/wrapper/* файлы (gradle-wrapper.jar а также gradle-wrapper.properties)?
  3. Иногда я вижу другие *.gradle файлы внутри проекта gradle каталог. Что это за дополнительные файлы Gradle и что они представляют / делают? Пользовательские плагины?
  4. Какая разница в свойствах, которые входят в settings.gradle против того, что должно быть определено внутри gradle.properties?

10 ответов

Решение
  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
    

    Все подробности можно найти здесь

Из Gradle 3.1--distribution-type опция также может быть использована. Опции бинарные и все и бин. все дополнительно содержит исходный код и документацию. все также лучше, когда используется IDE, поэтому редактор работает лучше. Недостатком является то, что сборка может длиться дольше (нужно загружать больше данных, бессмысленно на CI-сервере), и это займет больше места.

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

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

  3. 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
  1. Вы создадите их один раз, но обновите их, если вам нужна новая функция или что-то из плагина, который, в свою очередь, нуждается в более новой версии Gradle.

    Самый простой способ обновления: начиная с Gradle 2.2 вы можете просто скачать и извлечь полный или бинарный дистрибутив Gradle и запустить:

    $ <pathToExpandedZip>/bin/gradle wrapper
    

    Нет необходимости определять задачу, хотя вам, вероятно, нужно build.gradle файл.

    Это обновит или создаст gradlew а также gradlew.bat обертка, а также gradle/wrapper/gradle-wrapper.properties и gradle-wrapper.jar чтобы предоставить текущую версию Gradle, завернутый.

  2. Все это часть оболочки.

  3. Немного build.gradle файлы ссылаются на другие файлы или файлы в подкаталогах, которые являются подпроектами или модулями. Это становится немного сложнее, но если у вас есть один проект, вам в основном нужен один файл.

  4. 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]] -- Приятного кодирования.... .:)
Другие вопросы по тегам