Gradle buildscript зависимости

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

Опция 1:

build.gradle:

buildScript {
    repositories {
        mavenCentral();
    }
}

или же

build.gradle:

repositories {
    mavenCentral();
}

3 ответа

Решение

Репозитории в блоке buildScript используются для извлечения зависимостей ваших зависимостей buildScript. Это зависимости, которые помещаются в classpath вашей сборки и на которые вы можете ссылаться из вашего файла сборки. Например, дополнительные плагины, которые существуют в Интернете.

Репозитории на корневом уровне используются для получения зависимостей, от которых зависит ваш проект. Так что все зависимости вам нужны для компиляции вашего проекта.

Я хочу дать вам четкое представление. По этой причине я прилагаю код снимка build.grade для лучшего понимания.

зависимости buildscript:

buildscript {
    repositories {
        maven { url("https://plugins.gradle.org/m2/") }
    }

    dependencies {
        classpath 'net.saliman:gradle-cobertura-plugin:2.3.2'
        classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
    }
}

зависимости корневого уровня / ядра:

repositories{
    mavenLocal()
    maven { url("https://plugins.gradle.org/m2/") }
    maven { url "https://repo.spring.io/snapshot" }
}

dependencies {
        //Groovy
        compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.10'

        //Spock Test
        compile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.3'

        //Test
        testCompile group: 'junit', name: 'junit', version: '4.10'
        testCompile group: 'org.testng', name: 'testng', version: '6.8.5'
}

Итак, сначала я хочу уточнить одним словом, что

i) файл jar зависимостей buildscript будет загружен из репозиториев buildscript. [Внешняя зависимость проекта]

ii) файл jar зависимостей корневого уровня будет загружен из репозиториев корневого уровня. [Для зависимости проекта]

Вот,

Блок "buildscript" контролирует зависимости только для самого процесса buildscript, а не для кода приложения. Как различные Gradle плагин, как gradle-cobertura-plugin, gradle-lint-plugin находятся в репозиториях buildscript. Эти плагины не будут ссылаться как зависимости для кода приложения.

Но для компиляции проекта и тестирования запуска файлов JAR, таких как groovy all jar, junit and testng jar будет найден в репозиториях корневого уровня.

И еще одна вещь, maven { url("https://plugins.gradle.org/m2/") } часть может использоваться в обоих блоках. Потому что они используются для разных зависимостей.

Ссылка на ресурс: Разница между зависимостями в закрытии buildscript и ядром

Сценарий сборки (т. Е. Build.gradle) может иметь некоторые зависимости для выполнения самого сценария сборки. Вы бы заключили эти зависимости в блок buildScript. Глава 4 Gradle Beyond the Basics описывает это подробно.

Другие вопросы по тегам