Gradle dependencias de buildscript


176

¿Cuál es la diferencia entre declarar repositorios en la buildScriptsección de la construcción de gradle o en el nivel raíz de la construcción?

Opción 1:

build.gradle :

buildScript {
    repositories {
        mavenCentral();
    }
}

o

build.gradle :

repositories {
    mavenCentral();
}

Respuestas:


165

Los repositorios en el bloque buildScript se utilizan para obtener las dependencias de sus dependencias buildScript. Estas son las dependencias que se colocan en el classpath de su compilación y que puede consultar desde su archivo de compilación. Por ejemplo, complementos adicionales que existen en Internet.

Los repositorios en el nivel raíz se utilizan para buscar las dependencias de las que depende su proyecto. Entonces, todas las dependencias que necesita para compilar su proyecto.


19
Si necesito Maven Central tanto para mi buildscript como para mi proyecto, ¿debo declararlo dos veces?
Marcin Koziński

18
Sí, debe especificarlo dos veces, de hecho.
Hiery Nomus

Como ejemplo de esto, se puede agregar el complemento Spring propdeps al buildscript para habilitar las palabras clave "proporcionadas" y "opcionales" para las dependencias además de las palabras clave habituales "compilar" y "testCompile". Nota: El complemento de guerra ya ofrece la palabra clave "proporcionada", solo necesita accesorios para proyectos jar que se implementarán dentro de una guerra.
Powerlord

14

Quiero darte una idea clara. Por esta razón, adjunto el código de instantánea build.grade para una mejor comprensión.

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

Nivel raíz / dependencias principales:

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

Entonces, primero quiero aclarar en una sola palabra que

i) el archivo jar de dependencias de buildscript se descargará de los repositorios de buildscript. [Dependencia externa del proyecto]

ii) el archivo jar de dependencias de nivel raíz se descargará de los repositorios de nivel raíz. [Por dependencia del proyecto]

Aquí,

El bloque "buildscript" solo controla las dependencias para el proceso buildscript en sí, no para el código de la aplicación. Como varios plugins de gradle gradle-cobertura-plugin, gradle-lint-pluginse encuentran en los repositorios de buildscript. Esos complementos no serían referenciados como dependencias para el código de la aplicación.

Pero para la compilación de proyectos y la ejecución de pruebas, los archivos jar groovy all jar, junit and testng jarse encontrarán en repositorios de nivel raíz.

Y otra cosa , la maven { url("https://plugins.gradle.org/m2/") }porción se puede usar en ambos bloques. Porque se usan para diferentes dependencias.

Enlace de recursos: diferencia entre dependencias dentro del cierre buildscript y núcleo


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.