SlideShare a Scribd company logo
1 of 52
Download to read offline
WRITE GRADLE PLUGINSWRITE GRADLE PLUGINS
ESCRIBIR Y PUBLICAR TUS PLUGINS DEESCRIBIR Y PUBLICAR TUS PLUGINS DE
GRADLE "MADE EASY"GRADLE "MADE EASY"
Jorge Aguilera
1
PRESENTACIÓNPRESENTACIÓN
Created by /Jorge Aguilera @jagedn
2
PRESENTACIÓNPRESENTACIÓN
@jagedn (Jorge Aguilera)
Created by /Jorge Aguilera @jagedn
2
PRESENTACIÓNPRESENTACIÓN
@jagedn (Jorge Aguilera)
Groovy (101 GroovyScript)
Created by /Jorge Aguilera @jagedn
2
PRESENTACIÓNPRESENTACIÓN
@jagedn (Jorge Aguilera)
Groovy (101 GroovyScript)
Groogle (Groovy+Google)
Created by /Jorge Aguilera @jagedn
2
PRESENTACIÓNPRESENTACIÓN
@jagedn (Jorge Aguilera)
Groovy (101 GroovyScript)
Groogle (Groovy+Google)
Extensiones de Asciidoctor (Puravida Extensions)
Created by /Jorge Aguilera @jagedn
2
PRESENTACIÓNPRESENTACIÓN
@jagedn (Jorge Aguilera)
Groovy (101 GroovyScript)
Groogle (Groovy+Google)
Extensiones de Asciidoctor (Puravida Extensions)
Gradle Plugins
Created by /Jorge Aguilera @jagedn
2
PRESENTACIÓNPRESENTACIÓN
@jagedn (Jorge Aguilera)
Groovy (101 GroovyScript)
Groogle (Groovy+Google)
Extensiones de Asciidoctor (Puravida Extensions)
Gradle Plugins
Disclaimer
Created by /Jorge Aguilera @jagedn
2
PARTICIPAPARTICIPA
3
AGENDAAGENDA
4
AGENDAAGENDA
Introducción a Gradle
4
AGENDAAGENDA
Introducción a Gradle
Project, tasks, plugins
4
AGENDAAGENDA
Introducción a Gradle
Project, tasks, plugins
Pasos para construir y publicar en Gradle
4
AGENDAAGENDA
Introducción a Gradle
Project, tasks, plugins
Pasos para construir y publicar en Gradle
Demo time
4
AGENDAAGENDA
Introducción a Gradle
Project, tasks, plugins
Pasos para construir y publicar en Gradle
Demo time
PuraVida Gradle plugins
4
5
GRADLEGRADLE
Gradle vs Maven vs Ant
Install
download & unzip
sdkman install gradle
docker run -v $(pwd):/home/gradle/gradle
gradle init
./gradlew [-b build.gradle] hello
6
CONCEPTOSCONCEPTOS
Project(s)
Task(s)
Plugin(s)
7
PROJECTPROJECT
Cada build de Gradle está formado por un conjunto
de proyectos.
Puede ser construir un algo (un jar, un war, un zip,
etc)
Pero también puede ser hacer algo (desplegar un
servicio, enviar un tweet, etc)
8
TIPSTIPS
build.gradle es un DSL (ver charla de Groogle)
que describe builds
es Groovy!!!
Lo que no está de nido en build.gradle se busca
en Project
9
PROJECT PROPERTIESPROJECT PROPERTIES
Name Type Default
project Project The Project instance
name String The name of the project directory.
path String The absolute path of the project.
description String A description for the project.
projectDir File The directory containing the build script.
10
PROJECT PROPERTIESPROJECT PROPERTIES
Name Type Default
buildDir File projectDir/build
group Object unspecified
version Object unspecified
ant AntBuilder An AntBuilder instance
11
TASKTASK
Unidad básica de los proyectos.
12
TASK 1/3TASK 1/3
gradle hello
task hello(){
doLast{
println "hello"
}
}
13
TASK 2/3TASK 2/3
gradle goodbye
task hello(){
doLast{
println "hello"
}
}
task goodbye(){
doLast{
println "goodbye"
}
}
goodbye.dependsOn hello
14
TASK 3/3TASK 3/3
gradle hello
task hello(){
doLast{
println "hello ISS"
} }
hello.onlyIf{
def json = new groovy.json.JsonSlurper().
parseText("http://api.open-notify.org/iss-now.json".toURL
float nlon = json.iss_position.longitude as float
float nlat = json.iss_position.latitude as float
float LAT = 40.4237401
float LON = -3.7012653
Math.abs(LAT-nlat) < 1 && Math.abs(LON-nlon) < 1
}
15
16
PLUGINSPLUGINS
Mecanismo para compartir Tasks
Un plugin puede añadir 1 o varias Tasks
Dónde:
chero build.gradle
directorio buildSrc/src/main/groovy
proyecto independiente
17
BUILD.GRADLE / BUILDSRCBUILD.GRADLE / BUILDSRC
class GreetingPlugin implements Plugin<Project> {
void apply(Project project) {
project.task('hello') {
doLast {
println 'Hello from the GreetingPlugin'
}
}
}
}
apply plugin: GreetingPlugin
18
PROYECTO INDEPENDIENTEPROYECTO INDEPENDIENTE
Elegir un nombre cuali cado
gradle init
Crear MyTask
Crear MyPlugin y aplicar la Task
Anotar con @TaskAction el main de la Task
Declarar el plugin /META-INF/gradle-
plugins/TU.PLUGIN.CUALIFICADO.properties
19
DEPENDENCIASDEPENDENCIAS
dependencies {
compile localGroovy()
compile gradleApi()
}
20
DECLARAR EL PLUGINDECLARAR EL PLUGIN
TU.PLUGIN.CUALIFICADO.properties
implementation-class=com.foo.baar.MyPlugin
21
PLUGINPLUGIN
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.with {
apply(plugin: 'base')
task('mytask',
type:MyTask,
group:'others',
description: 'Look Mom, a plugin from Puravida in
}
}
}
}
22
TASKTASK
class MyTask extends DefaultTask{
@TaskAction
void callYourMethodAsYouWant(){
println "Hello"
}
}
23
CONFIGURACIÓN TASKCONFIGURACIÓN TASK
24
CONFIGURACIÓN TASKCONFIGURACIÓN TASK
Identi car propiedades de la task
24
CONFIGURACIÓN TASKCONFIGURACIÓN TASK
Identi car propiedades de la task
Aunque sea Groovy crea métodos get/set más una
función
24
CONFIGURACIÓN TASKCONFIGURACIÓN TASK
Identi car propiedades de la task
Aunque sea Groovy crea métodos get/set más una
función
Piensa en el usuario y no te limites a una lista de
propiedades (puedes anidarlas)
24
CONFIGURACIÓN TASKCONFIGURACIÓN TASK
Identi car propiedades de la task
Aunque sea Groovy crea métodos get/set más una
función
Piensa en el usuario y no te limites a una lista de
propiedades (puedes anidarlas)
Input (un chero de entrada por ejemplo) vs Output
(un directorio de salida)
24
CONFIGURACIÓN TASKCONFIGURACIÓN TASK
Identi car propiedades de la task
Aunque sea Groovy crea métodos get/set más una
función
Piensa en el usuario y no te limites a una lista de
propiedades (puedes anidarlas)
Input (un chero de entrada por ejemplo) vs Output
(un directorio de salida)
Valores simples, basados en cheros ( le, collections,
etc), anidadas 24
ANOTACIONESANOTACIONES
Anota siempre métodos get o la property Groovy para
ayudar a Gradle!!
Name Name Name Name
@Input @Output @InputFile @OutputFile
@InputFiles @OutputFiles @InputDirectory @OutputDirectory
@Optional @Internal @Nested @TaskAction
25
TESTTEST
Podemos utilizar JUnit y/o Spock para crear tests!!
plugins {
id 'java-gradle-plugin'
}
dependencies{
// add these
testCompile gradleTestKit()
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile ("org.spockframework:spock-core:1.1-groovy-2.4")
exclude group: 'org.codehaus.groovy', module: 'groovy-all
exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
}
26
MYTASKSPECMYTASKSPEC
class MyTaskSpec extends Specification{
@Rule
TemporaryFolder testProjectDir
File buildFile
def setup() {
buildFile = testProjectDir.newFile('build.gradle')
buildFile << """
plugins {
id 'TU.PLUGIN.CUALIFICADO'
}"""
}
def "run task"() {
buildFile << 'hello{}'
when:
def result = GradleRunner.create()....build()
then:
27
PUBLISHPUBLISH
plugins{
id "com.gradle.plugin-publish" version "0.10.0"
}
./gradlew publishPlugins
28
DEMO PARTYDEMO PARTY
Download NASA images
29
PURAVIDA GRADLE PLUGINSPURAVIDA GRADLE PLUGINS
30
PURAVIDA GRADLE PLUGINSPURAVIDA GRADLE PLUGINS
Funcionales
30
PURAVIDA GRADLE PLUGINSPURAVIDA GRADLE PLUGINS
Funcionales
Didácticos
30
CHECK-SERVERCHECK-SERVER
Ejecuta la task si una URL devuelve 200 y puedes
descargar el body a chero
id 'com.puravida.gradle.checkserver'
Show me the code!!!
https://puravida-gradle.gitlab.io/check-server
31
SOCIAL NETWORKSOCIAL NETWORK
Comparte el resultado de un build por ejemplo
twitter, telegram, slack
id 'com.puravida.gradle.socialnetwork'
Show me the code!!!
https://puravida-gradle.gitlab.io/social-network
32
GROOGLEGROOGLE
Descarga/Sube cheros de/a tu Drive (por ahora)
id 'com.puravida.gradle.groogle'
Show me the code!!!
https://puravida-gradle.gitlab.io/groogle
33
34

More Related Content

Similar to Write Gradle Plugins

Realizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaRealizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaAndres Almiray
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Agustin Ramos
 
Seminario de Groovy y grails
Seminario de Groovy y grailsSeminario de Groovy y grails
Seminario de Groovy y grailsParadigma Digital
 
Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaSoftware Guru
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradleDavid Gómez García
 
Programación Avanzado Joomla Day 2009
Programación Avanzado Joomla Day 2009Programación Avanzado Joomla Day 2009
Programación Avanzado Joomla Day 2009erny66
 
Programación avanzada en Joomla!
Programación avanzada en Joomla!Programación avanzada en Joomla!
Programación avanzada en Joomla!Alfredo Romeo
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011jose diaz
 
Estado del Desarrollo de PostgreSQL-9.0
Estado del Desarrollo de PostgreSQL-9.0Estado del Desarrollo de PostgreSQL-9.0
Estado del Desarrollo de PostgreSQL-9.0Marcos Ortiz Valmaseda
 
Groovy no es java sin puntos y comas - Codemotion Madrid 2014
Groovy no es java sin puntos y comas - Codemotion Madrid 2014Groovy no es java sin puntos y comas - Codemotion Madrid 2014
Groovy no es java sin puntos y comas - Codemotion Madrid 2014Pablo Alba
 
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdfPresentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdfGustavo G. Mármol
 
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdfPresentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdfGustavo G. Marmol Alioto
 

Similar to Write Gradle Plugins (20)

Realizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaRealizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y Eficacia
 
Tests en Java con Groovy y Spock
Tests en Java con Groovy y SpockTests en Java con Groovy y Spock
Tests en Java con Groovy y Spock
 
Introduccion A Groovy
Introduccion A GroovyIntroduccion A Groovy
Introduccion A Groovy
 
Introducción a Groovy
Introducción a GroovyIntroducción a Groovy
Introducción a Groovy
 
Grails
GrailsGrails
Grails
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
 
Seminario de Groovy y grails
Seminario de Groovy y grailsSeminario de Groovy y grails
Seminario de Groovy y grails
 
Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficacia
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradle
 
Introducción a Groovy
Introducción a GroovyIntroducción a Groovy
Introducción a Groovy
 
Programación Avanzado Joomla Day 2009
Programación Avanzado Joomla Day 2009Programación Avanzado Joomla Day 2009
Programación Avanzado Joomla Day 2009
 
Programación avanzada en Joomla!
Programación avanzada en Joomla!Programación avanzada en Joomla!
Programación avanzada en Joomla!
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011
 
Estado del Desarrollo de PostgreSQL-9.0
Estado del Desarrollo de PostgreSQL-9.0Estado del Desarrollo de PostgreSQL-9.0
Estado del Desarrollo de PostgreSQL-9.0
 
Groovy no es java sin puntos y comas - Codemotion Madrid 2014
Groovy no es java sin puntos y comas - Codemotion Madrid 2014Groovy no es java sin puntos y comas - Codemotion Madrid 2014
Groovy no es java sin puntos y comas - Codemotion Madrid 2014
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdfPresentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
 
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdfPresentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
Presentación Univ Austral-Oracle v Google-Gustavo G Marmol Alioto.pdf
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 

Recently uploaded

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 

Recently uploaded (15)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 

Write Gradle Plugins