Gradle - Complementos

El complemento no es más que un conjunto de tareas, casi todas las tareas útiles, como compilar tareas, configurar objetos de dominio, configurar archivos de origen, etc., son manejadas por complementos. Aplicar un complemento a un proyecto significa que permite que el complemento amplíe las capacidades del proyecto. Los complementos pueden hacer cosas como:

  • Amplíe el modelo básico de Gradle (por ejemplo, agregue nuevos elementos DSL que se puedan configurar).
  • Configure el proyecto de acuerdo con las conversiones (por ejemplo, agregue nuevas tareas o configure valores predeterminados sensibles).
  • Aplicar una configuración específica (por ejemplo, agregar repositorios organizacionales o hacer cumplir los estándares).

Tipos de complementos

Hay dos tipos de complementos en Gradle, complementos de script y complementos binarios. Los complementos de script son un script de compilación adicional que brinda un enfoque declarativo para manipular la compilación. Esto se usa normalmente dentro de una compilación. Los complementos binarios son las clases que implementan la interfaz del complemento y adoptan un enfoque programático para manipular la compilación. Los complementos binarios pueden residir con un script de compilación, con la jerarquía del proyecto o externamente en un JAR de complemento.

Aplicación de complementos

Project.apply()El método API se utiliza para aplicar el complemento en particular. Puede utilizar el mismo complemento varias veces. Hay dos tipos de complementos, uno es un complemento de script y el segundo es un complemento binario.

Complementos de secuencias de comandos

Los complementos de secuencias de comandos se pueden aplicar desde una secuencia de comandos en el sistema de archivos local o en una ubicación remota. Las ubicaciones del sistema de archivos son relativas al directorio del proyecto, mientras que las ubicaciones de los scripts remotos especifican la URL HTTP. Eche un vistazo al siguiente fragmento de código. Se utiliza para aplicar elother.gradlecomplemento al script de compilación. Utilice este código enbuild.gradle archivo.

apply from: 'other.gradle'

Complementos binarios

Cada complemento se identifica mediante la identificación del complemento en aquellos que algunos complementos principales utilizan nombres cortos para aplicarlo y algunos complementos de la comunidad utilizan un nombre completo para la identificación del complemento. En algún momento permite especificar la clase de complemento.

Eche un vistazo al siguiente fragmento de código. Muestra cómo aplicar el complemento de Java utilizando su tipo. Utilice este código enbuild.gradle archivo.

apply plugin: JavaPlugin

Eche un vistazo al siguiente código para aplicar el complemento principal con un nombre corto. Utilice este código enbuild.gradle archivo.

plugins {
   id 'java'
}

Eche un vistazo al siguiente código para aplicar el complemento de la comunidad con un nombre corto. Utilice este código enbuild.gradle archivo.

plugins {
   id "com.jfrog.bintray" version "0.4.1"
}

Escribir complementos personalizados

Al crear un complemento personalizado, debe escribir una implementación del complemento. Gradle crea una instancia del complemento y llama a la instancia del complemento mediante el método Plugin.apply (). El siguiente ejemplo contiene un complemento de saludo, que agrega una tarea de saludo al proyecto. Eche un vistazo al siguiente código. Utilice este código enbuild.gradle archivo.

apply plugin: GreetingPlugin

class GreetingPlugin implements Plugin<Project> {
   void apply(Project project) {
      project.task('hello') << {
         println "Hello from the GreetingPlugin"
      }
   }
}

Utilice el siguiente código para ejecutar el script anterior.

C:\> gradle -q hello

Salida:

Hello from the GreetingPlugin

Obtener información de la compilación

La mayoría de los complementos necesitan el soporte de configuración del script de compilación. El proyecto Gradle tiene un objeto ExtensionContainer asociado que ayuda a rastrear todas las configuraciones y propiedades que se pasan a los complementos.

Agreguemos un objeto de extensión simple al proyecto. Aquí agregamos un objeto de extensión de saludo al proyecto, que le permite configurar el saludo. Utilice este código enbuild.gradle archivo.

apply plugin: GreetingPlugin

greeting.message = 'Hi from Gradle'

class GreetingPlugin implements Plugin<Project> {
   void apply(Project project) {
      // Add the 'greeting' extension object
      project.extensions.create("greeting", GreetingPluginExtension)
		
      // Add a task that uses the configuration
      project.task('hello') << {
         println project.greeting.message
      }
   }
}

class GreetingPluginExtension {
   def String message = 'Hello from GreetingPlugin'
}

Utilice el siguiente código para ejecutar el script anterior.

C:\> gradle -q hello

Salida:

Hi from Gradle

En este ejemplo, GreetingPlugin es un viejo objeto Groovy con un campo llamado mensaje. El objeto de extensión se agrega a la lista de complementos con el nombre saludo. Este objeto pasa a estar disponible como una propiedad de proyecto con el mismo nombre que el objeto de extensión.

Gradle agrega un cierre de configuración para cada objeto de extensión, por lo que puede agrupar las configuraciones. Eche un vistazo al siguiente código. Utilice este código enbuild.gradle archivo.

apply plugin: GreetingPlugin

greeting {
   message = 'Hi'
   greeter = 'Gradle'
}

class GreetingPlugin implements Plugin<Project> {
   void apply(Project project) {
      project.extensions.create("greeting", GreetingPluginExtension)
		
      project.task('hello') << {
         println "${project.greeting.message} from ${project.greeting.greeter}"
      }
   }
}

class GreetingPluginExtension {
   String message
   String greeter
}

Utilice el siguiente código para ejecutar el script anterior.

C:\> gradle -q hello

Salida:

Hello from Gradle

Complementos estándar de Gradle

Hay diferentes complementos que se incluyen en la distribución de Gradle.

Complementos de idioma

Estos complementos agregan soporte para varios lenguajes que se pueden compilar y ejecutar en la JVM.

ID de complemento Se aplica automáticamente Descripción
Java base java Agrega capacidades de compilación, prueba y agrupación de Java a un proyecto. Sirve como base para muchos de los otros complementos de Gradle.
maravilloso Java, base groovy Agrega soporte para la construcción de proyectos Groovy.
scala Java, scala-base Agrega soporte para construir proyectos Scala.
antlr Java Agrega soporte para generar analizadores usando Antlr.

Incubación de complementos de idioma

Estos complementos añaden soporte para varios idiomas.

ID de complemento Se aplica automáticamente Descripción
ensamblador - Agrega capacidades de lenguaje ensamblador nativo a un proyecto.
C - Agrega capacidades de compilación de código fuente C a un proyecto.
cpp - Agrega capacidades de compilación de código fuente C ++ a un proyecto.
C objetivo - Agrega capacidades de compilación de fuentes de Objective-C a un proyecto.
objetivo-cpp - Agrega capacidades de compilación de código fuente Objective-C ++ a un proyecto.
recursos de windows - Agrega soporte para incluir recursos de Windows en binarios nativos.