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


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

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 и что они представляют / делают? Пользовательские плагины?
  4. в чем разница в свойствах, которые входят в settings.gradle против того, что должно быть определено внутри gradle.properties?
6 172

6 ответов:

  1. вы генерируете его один раз, и снова, когда вы хотите изменить версию Gradle, которую вы используете в проекте. Нет необходимости генерировать так часто. здесь представлены документы. Просто добавьте wrapper задание build.gradle файл и запустите эту задачу, чтобы получить структуру оболочки.

    помните, что вы должны иметь Gradle установлен для создания оболочки. Отличным инструментом для управления артефактами g-экосистемы является SDKMAN!. Для создания gradle wrapper, добавьте следующий фрагмент кода в build.gradle file:

    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 опция также может быть использована. Опционы Бинарные и все и bin. все дополнительно содержит исходный код и документация. все также лучше, когда используется IDE, поэтому редактор работает лучше. Недостатком является то, что сборка может длиться дольше (нужно загрузить больше данных, бессмысленно на сервере CI), и это займет больше времени пространство.

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

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

  3. settings.gradle отвечает, а для структуры проекта (модули, имена и т. д.), А gradle.properties используется для проекта и Gradle в внешний подробности (версия, аргументы командной строки -XX свойства и т. д.)

создание оболочки Gradle

проект сборки 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 и посмотреть, что Google считает стандартом проект.

Android Studio имеет средства для импорта старых проектов, которые также могут помочь.

начиная с Gradle 2.4, вы можете использовать gradle wrapper --gradle-version X.X для настройки конкретной версии оболочки Gradle, без добавления каких-либо задач в ваш . В следующий раз, когда вы используете обертку, она загрузит соответствующий дистрибутив Gradle для соответствия.

Если вы хотите загрузить gradle с исходным кодом и документами, url-адрес распространения по умолчанию настроен в gradle-wrapper.properites не удовлетворит ваш need.It это https://services.gradle.org/distributions/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")
}

эта команда используется для указания Gradle обновить оболочку таким образом, чтобы она захватила версии распространения библиотек, которые включают исходный код:

./gradlew wrapper --gradle-version <version> --distribution-type all

указание типа дистрибутива с помощью "all" гарантирует, что Gradle загрузит исходные файлы для использования в вашей среде разработки.

плюсы:

  • IDE будет иметь немедленный доступ к исходному коду. Например, Intellij IDEA не предложит вам обновить ваш создайте скрипты для включения исходного дистрибутива (потому что эта команда уже сделала это)

минусы:

  • более длинный / больший процесс сборки, потому что он загружает исходный код. Это пустая трата времени / пространства на сервере сборки или CI, где исходный код не нужен.

пожалуйста, прокомментируйте или предоставьте другой ответ, если вы знаете о какой-либо опции командной строки, чтобы сказать Gradle не загружать источники на сервере сборки.

  1. вы будете генерировать их один раз, но обновить их, если вам нужна новая функция или что-то из плагина, который в свою очередь нуждается в новой версии gradle.

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

    $ <pathToExpandedZip>/bin/gradle wrapper
    

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

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

  2. это все часть обертки.

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

  4. settings.gradle регулирует проект, модуль и другое виды имен и настроек,gradle.properties настраивает resusable переменные для ваших файлов gradle, если вам нравится, и вы чувствуете, что они будут понятнее таким образом.