Я новичок в Gradle, и я читаю документацию, но я не понимаю некоторые ее части. Одна из этих частей связана с buildscript
блоком. Какова его цель?
Если вашему сценарию сборки необходимо использовать внешние библиотеки, вы можете добавить их в путь к классам сценария в самом сценарии сборки. Вы делаете это, используя метод buildscript (), передавая замыкание, которое объявляет путь к классу сценария сборки.
buildscript { repositories { mavenCentral() } dependencies { classpath group: 'commons-codec', name: 'commons-codec', version: '1.2' } }
Хорошо, но какая разница с:
repositories {
mavenCentral()
}
dependencies {
compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
Например, почему это необходимо использовать buildscript
?
Ответы:
buildScript
Блок определяет , какие плагин, классы задач, а также другие классы доступны для использования в остальной части сценария сборки . БезbuildScript
блока вы можете использовать все, что поставляется с Gradle "из коробки". Если вы дополнительно хотите использовать сторонние плагины, классы задач или другие классы (в сценарии сборки!), Вы должны указать соответствующие зависимости вbuildScript
блоке.источник
sample.infotask', name: 'infotask', version: '1.0'
И используйте задачу _uploadArchives для загрузки ее в локальное хранилище ../lib ' В другом проекте, если я использую свою задачу, я должен написать: `buildscript {repositories {maven {url' file: ../ lib '}} зависимости {группа пути к классам:' sample.infotask ', имя:' infotask ', версия:' 1.0 '}} Я прав? Почему мы должны использовать блок buildScript ? Когда я загружаю локальный артефакт, на моей машине есть баночка. И просто нужно сказать Грэдлу, откуда и что положить в мой путь к классу, что еще здесь особенного?buildScript
блок, потому что Gradle нуждается в этой информации, чтобы понять остальную часть сценария сборки . Вот почему вы должны предоставить эту информацию в отдельном канале (buildScript
блоке). Технически говоря, Gradle нужна эта информация для компиляции и оценки остальной части сценария сборки. Под капотом происходит то, что Gradle разделяет скрипт сборки на два скрипта (buildScript
блок и все остальное), чтобы он мог обрабатывать их отдельно.dependencies
иrepositories
разделы перечисляют зависимости, которые необходимы для сборки вашего исходного кода, его работы и т. Д.buildscript
для самогоbuild.gradle
файла. Таким образом, это будет содержать зависимости, скажем, для создания RPM,Dockerfile
и любые другие зависимости для запуска задач во всех зависимыхbuild.gradle
источник
buildscript
это просто зависимость для вашего сценария сборкиЯ ценю ответ Питера ... но мне было не сразу очевидно, что имел в виду остальная часть сценария сборки, как подчеркивалось в ответе и в документации.
Обычно ввод зависимой функциональности предназначен для использования в Java-программе или любой другой программе, которую вы можете писать. Скажем, Spring, не для использования в сценарии сборки, а в Java-программе. Помещение в
buildscript
замыкание гарантирует, что зависимости доступны для использования в самой сборке Gradle. Не выходная программа.источник
Раздел конфигурации "buildscript" предназначен для самого gradle (т.е. изменяет способ, которым gradle может выполнять сборку). Поэтому этот раздел обычно включает плагин Android Gradle.
источник
Это немного высокий уровень, но надежда помогает.
Для меня началось четкое различие, когда я начинаю понимать, что такое строительный блок , метод и задача. Как выглядит синтаксис, как вы можете их настроить и т. Д. Поэтому я предлагаю вам пройти через все это. После этого вы можете начать понимать смысл этого синтаксиса.
Затем очень важно знать тип объекта build.gradle (экземпляр класса Project), чтобы узнать, что вы можете иметь внутри файла build.gradle. Это ответило бы, откуда этот 'buildScript' и другие. И чтобы расширить ваши возможности / функции (скажем, Android), посмотрите, как плагины могут помочь.
И последнее, но не менее важное: здесь есть очень хороший учебник, в котором говорится о замыканиях, делегатах, которые являются основными понятиями, необходимыми для понимания сценария.
источник
Немного больше объяснения, демонстрируя файл верхнего уровня для Android.
файл Gradle уровня модуля
Что такое "плагин"? Это просто Java-классы, которые реализуют интерфейс плагина. Под интерфейсом у него есть метод «применить» для добавления нескольких объектов задач с разными именами. Задача - это класс, в котором мы можем реализовать рабочий процесс. Например, задача сборки состоит из потока сборки приложения.
Итак, что делает buildscript? Он определяет, где найти плагины. Что делает плагин? Он включает в себя несколько задач. Что делает задача? Он предоставляет нам сборку, установку, сборку и т. Д.
Мое понимание может быть неправильным. Пожалуйста, не стесняйтесь поправлять меня, если вы обнаружите, что что-то вводит в заблуждение.
источник