(Quick Reference)

3.7.1 Configuración y dependencias - Reference Documentation

Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith

Version: null

3.7.1 Configuración y dependencias

Grails features five dependency resolution configurations (or 'scopes'):

  • build: Dependencies for the build system only
  • compile: Dependencies for the compile step
  • runtime: Dependencies needed at runtime but not for compilation (see above)
  • test: Dependencies needed for testing but not at runtime (see above)
  • provided: Dependencies needed at development time, but not during WAR deployment

Within the dependencies block you can specify a dependency that falls into one of these configurations by calling the equivalent method. For example if your application requires the MySQL driver to function at runtime you can specify that like this:

Grails ofrece cinco configuraciones de resolución de dependencia (o 'ámbitos'):

  • build: dependencias sólo para el sistema de compilación.
  • compile: dependencias para el tiempo de compilación.
  • runtime: dependencias necesarias en tiempo de ejecución, pero no para la compilación (véase más arriba).
  • test: dependencias necesarias para las pruebas, pero no en tiempo de ejecución (véase más arriba).
  • provided: dependencias necesarias en el tiempo de desarrollo, pero no durante el despliegue de WAR.

Dentro del bloque de dependencies puede especificar una dependencia que corresponde con una de estas configuraciones llamando al método equivalente. Por ejemplo, si su aplicación requiere el controlador MySQL funcione en tiempo de ejecución(runtime) puede especificaro así:

runtime 'com.mysql:mysql-connector-java:5.1.16'

This uses the string syntax: group:name:version. You can also use a Map-based syntax:

Esto utiliza la sintaxis de cadena: group:name:version. También puede utilizar una sintaxis basada en mapas:

runtime group: 'com.mysql',
        name: 'mysql-connector-java',
        version: '5.1.16'

In Maven terminology, group corresponds to an artifact's groupId and name corresponds to its artifactId.

Multiple dependencies can be specified by passing multiple arguments:

En la terminología de Maven, group corresponde al groupId de un artefacto y name corresponde a su artifactId.

Varias dependencias pueden especificarse pasando varios argumentos:

runtime 'com.mysql:mysql-connector-java:5.1.16',
        'net.sf.ehcache:ehcache:1.6.1'

// o

runtime( [group:'com.mysql', name:'mysql-connector-java', version:'5.1.16'], [group:'net.sf.ehcache', name:'ehcache', version:'1.6.1'] )

Disabling transitive dependency resolution

By default, Grails will not only get the JARs and plugins that you declare, but it will also get their transitive dependencies. This is usually what you want, but there are occasions where you want a dependency without all its baggage. In such cases, you can disable transitive dependency resolution on a case-by-case basis:

Deshabilitar la resolución de dependencias transitiva

De forma predeterminada, Grails no sólo obtendrá los jars y plugins que se declaran, sino también sus dependencias transitivas. Esto suele ser lo que se desea, pero hay ocasiones donde desea una dependencia sin todo su equipaje. En tales casos, puede deshabilitar la resolución de dependencia transitivas:

runtime('com.mysql:mysql-connector-java:5.1.16',
        'net.sf.ehcache:ehcache:1.6.1') {
    transitive = false
}

// o runtime group:'com.mysql', name:'mysql-connector-java', version:'5.1.16', transitive:false

Excluding specific transitive dependencies

A far more common scenario is where you want the transitive dependencies, but some of them cause issues with your own dependencies or are unnecessary. For example, many Apache projects have 'commons-logging' as a transitive dependency, but it shouldn't be included in a Grails project (we use SLF4J). That's where the excludes option comes in:

Excluyendo las dependencias transitivas específicas

Un escenario mucho más común es cuando desea las dependencias transitivas, pero algunos de ellos causan problemas con sus propias dependencias o son innecesarias. Por ejemplo, muchos proyectos de Apache tienen 'commons-logging' como una dependencia transitiva, pero no debería ser incluido en un proyecto Grails (utilizamos SLF4J). Ahí es donde la opción excludes interviene:

runtime('com.mysql:mysql-connector-java:5.1.16',
        'net.sf.ehcache:ehcache:1.6.1') {
    excludes "xml-apis", "commons-logging"
}

// o runtime(group:'com.mysql', name:'mysql-connector-java', version:'5.1.16') { excludes([ group: 'xml-apis', name: 'xml-apis'], [ group: 'org.apache.httpcomponents' ], [ name: 'commons-logging' ])

As you can see, you can either exclude dependencies by their artifact ID (also known as a module name) or any combination of group and artifact IDs (if you use the Map notation). You may also come across exclude as well, but that can only accept a single string or Map:

Como puede ver, puede excluir las dependencias por su ID de artefacto (también conocido como un nombre de módulo) o cualquier combinación de ID de grupo y artefacto (si se utiliza la notación del mapa). También puede utilizar exclude, pero este sólo puede aceptar una sola cadena o mapa:

runtime('com.mysql:mysql-connector-java:5.1.16',
        'net.sf.ehcache:ehcache:1.6.1') {
    exclude "xml-apis"
}

Using Ivy module configurations

If you use Ivy module configurations and wish to depend on a specific configuration of a module, you can use the dependencyConfiguration method to specify the configuration to use.

Utilizando las configuraciones de módulo de Ivy

Si utiliza las configuraciones de módulo de Ivy y desea depender de una configuración específica de un módulo, puede utilizar el método dependencyConfiguration para especificar la configuración a usar.

provided("my.org:web-service:1.0") {
    dependencyConfiguration "api"
}

If the dependency configuration is not explicitly set, the configuration named "default" will be used (which is also the correct value for dependencies coming from Maven style repositories).

Si no se establece explícitamente la configuración de la dependencia, la configuración denominada "default" se utilizará (que es también el valor correcto para dependencias procedentes de repositorios de estilo Maven).