Gradle buildscript dependencies

176

Qual é a diferença entre declarar repositórios na buildScriptseção da compilação gradle ou no nível raiz da compilação.

Opção 1:

build.gradle :

buildScript {
    repositories {
        mavenCentral();
    }
}

ou

build.gradle :

repositories {
    mavenCentral();
}
Jeff Storey
fonte

Respostas:

165

Os repositórios no bloco buildScript são usados ​​para buscar as dependências de suas dependências buildScript. Essas são as dependências colocadas no caminho de classe da sua compilação e as quais você pode consultar no seu arquivo de compilação. Por exemplo, plugins extras que existem na internet.

Os repositórios no nível raiz são usados ​​para buscar as dependências das quais seu projeto depende. Portanto, todas as dependências necessárias para compilar seu projeto.

Hiery Nomus
fonte
19
Se eu precisar do maven central para meu buildscript e meu projeto, preciso declará-lo duas vezes?
Marcin Koziński
18
Sim, você precisa especificá-lo duas vezes e, de fato.
Hiery Nomus 4/03/2014
Como exemplo disso, o plug-in Spring propdeps pode ser adicionado ao buildscript para ativar palavras-chave "fornecidas" e "opcionais" para dependências, além das palavras-chave comuns "compilar" e "testCompile". Nota: O plug-in war já oferece a palavra-chave "fornecida", você só precisa de propdeps para projetos jar que serão implementados dentro de uma guerra.
Powerlord 24/09/15
14

Eu quero lhe dar uma concepção clara. Por esse motivo, estou anexando o código de captura instantânea build.grade para melhor entendimento.

dependências 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'
    }
}

nível raiz / dependências principais:

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'
}

Então, primeiro eu quero esclarecer em uma única palavra que

i) o arquivo jar das dependências do buildscript será baixado dos repositórios do buildscript. [Dependência externa do projeto]

ii) o arquivo jar das dependências no nível raiz será baixado dos repositórios no nível raiz. [Para dependência do projeto]

Aqui,

O bloco "buildscript" controla apenas dependências para o próprio processo buildscript, não para o código do aplicativo. Como vários plugins gradle como gradle-cobertura-plugin, gradle-lint-pluginsão encontrados em repositórios buildscript. Esses plug-ins não seriam referenciados como dependências para o código do aplicativo.

Mas para a compilação do projeto e o teste de execução de arquivos jar como groovy all jar, junit and testng jarserão encontrados nos repositórios no nível raiz.

E outra coisa , maven { url("https://plugins.gradle.org/m2/") }parte pode ser usada nos dois blocos. Porque eles são usados ​​para diferentes dependências.

Link do recurso: Diferença entre dependências no fechamento do buildscript e no núcleo

SkyWalker
fonte
12

O script de construção (ou seja, build.gradle) pode ter algumas dependências para a execução do próprio script de construção. Você incluiria essas dependências no bloco buildScript. O capítulo 4 de Gradle Beyond the Basics descreve em detalhes.

user3240644
fonte