Build Automation Evolved
Upcoming SlideShare
Loading in...5
×
 

Build Automation Evolved

on

  • 1,271 views

Presentation at JavaCE Conference about Build Automation using Gradle.

Presentation at JavaCE Conference about Build Automation using Gradle.

Statistics

Views

Total Views
1,271
Views on SlideShare
1,269
Embed Views
2

Actions

Likes
3
Downloads
3
Comments
1

1 Embed 2

http://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Mto cômico kara! Fazia tempo q nao via um slide teu, já tinha esquecido de como era hehehhehe
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Build Automation Evolved Build Automation Evolved Presentation Transcript

  • GradleBuild Automation Evolved 1
  • Quem somos nozes? 2
  • Marcelo EmanoelConsultor na TriadWorks@marceloemanoel 3
  • Yuri AdamsEstagiário da TriadWorks@yuriadams 4
  • TriadWorksConsultoriaTreinamentosMentoring 5
  • AutomatizaçãoSe a tarefa é repetitiva, AUTOMATIZE!Aumenta a qualidade do projetoAumenta a produtividade do time 6
  • Cenário Atual 7
  • Cenário AtualFerramentas mais comuns: ANT MAVEN ANT + IVY 8
  • Pontos Positivos: Ant + IvyControle total do buildFlexibilidadeDependências entre TargetsMuitas targets existentesGerenciamento de dependências 9
  • 10
  • Pontos Fracos: Ant + IvyAusência de ConvençõesExtremamente verbosoMais imperativo que descritivo 11
  • Pontos Positivos: MavenConvenções invés de ConfiguraçõesLayout PadrãoSistema de PluginsBuilds Multi MódulosGerenciamento de dependências 12
  • 13
  • Pontos fracos: MavenConvenções extremamente inflexíveisIntegração obrigatória no ciclo de buildFaz download da internet 14
  • 15
  • Foco em pontos positivos das demaisopçõesDSL de ProjetoVoltado para projetos baseados na JVMUtiliza Groovy 16
  • Flexibilidade do AntGerenciamento de dependências estiloIvyConvenções inteligentes do MavenVelocidade e Hashing do GitPoder da Metaprogramação do Groovy 17
  • SEM XML! 18
  • 19
  • GradleConvenções, mas sempre com apossibilidade de configuraçãoGerenciamento de DependênciasIntegração com Ant e MavenPluginsBuild multi projetos 20
  • GradleFlexibilidadeDeclarativoDSL 21
  • Convenções 22
  • 23
  • Convenções 24
  • Gerenciamento de Dependênciasapply plugin: “java” <?xml version=”1.0” encoding=”UTF-8”?>repositories { <ivy-module version=”2.0”> mavenCentral() <info organisation=”br.com.teste.ivy”} module=”teste-ivy”/>dependencies { <configurations> compile “br.com.caelum:vraptor:3.4.1” <conf name=”runtime”/> testCompile “junit:junit:4.10” <conf name=”test”/>} </configurations> <dependencies> <dependency<project xmlns=”http://maven.apache.org/POM/4.0.0” org=”br.com.caelum” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” name=”vraptor” xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 rev=”3.4.1” http://maven.apache.org/maven-v4_0_0.xsd”> conf=”runtime->default” />! <modelVersion>4.0.0</modelVersion> </dependencies> <groupId>GRUPO</groupId> </ivy-module> <artifactId>ATERFATO</artifactId> <packaging>war</packaging> <name>Nome</name> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>br.com.caelum</groupId> <artifactId>vraptor<artifactId> <version>3.4.1</version> <dependency> </dependencies> 25</project>
  • Gerenciamento de DependênciasCompatibilidade com repositórios doMaven e IvyArquivos em discoCache 26
  • Gerenciamento de DependênciasRepositório Central do repositories { mavenCentral() Maven: } Outro Repositório repositories { mavenRepo url: “http://maven.ow2.org/maven2/” Maven: } repositories { flatDir name: “repositorioEmDisco”, dirs: “lib”Repositório em Disco: flatDir dirs: [“WEB-INF/lib”, “outroDiretorio”] } 27
  • Gerenciamento de Dependências dependencies { compile(group:”br.com.caelum”,Repositório: name:”vraptor”, version:”3.4.1”) providedCompile “javax.servlet:servlet-api:2.5” } dependencies { Diretório: compile fileTree(dir:“${webAppDirName}/WEB-INF/lib”, include:”*.jar”) } dependencies { springModules.each { Código: } compile “org.springframework:${it}:3.1.0.RELEASE” } 28
  • Gradle TasksMenor unidade de trabalho executadapelo buildSão objetosPossuem tiposFazem parte de um Grafo DirecionadoAcíclico 29
  • (30
  • Grafo Direcionado AcíclicoPara qualquer vértice v, não há umaligação dirigida começando e terminandoem v 31
  • Grafo Direcionado Acíclico 32
  • )33
  • Gradle taskstask simpleTask << { println “I am a simple task”}task simpleTasksimpleTask << { println “Am I what?”}simpleTask << { println “I am a simple Task”} 34
  • Gradle tasks Depends Ontask dependencyTask << { println “I’m a dependency”}task dependentTask { task dependentTask { dependsOn “dependencyTask” dependsOn << dependencyTask} }task dependentTask { task dependentTask { dependsOn dependencyTask loadTask.dependsOn dependencyTask} } 35
  • Gradle tasks Depends Ontask dependencyTask << { println “I’m a dependency”}task dependentTask(dependsOn: dependencyTask) { doFirst {task loadTask(dependsOn: dependsTask) println “first” } doLast { println “last” }} 36
  • Gradle tasks Depends On Gradletask dependencyTask << { println “I’m a dependency”}task dependentTask(dependsOn: dependencyTask) ANT<target name=”dependencyTarget”> <echo>everybody depends on me to print anything</echo></target><target name=”dependentTarget” depends=”dependencyTarget”></target> 37
  • Gradle tasks Task Types Gradle ANTapply plugin: “java” <target name=”jar” depends=”compile”> <delete file=”hello.jar”/>task myJarTask(type: Jar) { <delete file=”MANIFEST.MF”/> manifest { <manifest file=”MANIFEST.MF”> attributes(BuiltBy: “firstValue”, <attribute name=”Built-By” MainClass: “howTo.Hello”) value=”${user.name}”/> } <attribute name=”Main-Class” archiveName: “hello.jar” value=”howto.Hello”/> destinationDir = file(“${buildDir}/jars”) </manifest> from sourceSets.main.classes} <jar destfile=”hello.jar” basedir=”.” includes=”**/*.class” manifest=”MANIFEST.MF” /> </target> 38
  • Gradle tasks Task Types Gradle ANTapply plugin: “java” <target name=”jar” depends=”compile”>apply plugin: “application” <delete file=”hello.jar”/>mainClassName = “howto.Hello” <delete file=”MANIFEST.MF”/> <manifest file=”MANIFEST.MF”> <attribute name=”Built-By” value=”${user.name}”/> <attribute name=”Main-Class” value=”howto.Hello”/> </manifest> <jar destfile=”hello.jar” basedir=”.” includes=”**/*.class” manifest=”MANIFEST.MF” /> </target> 39
  • PluginsFuncionalidades que interessamAdicionam novas Tasks, domain Objects,conventions e extendem os objetos docore e de outros pluginsImplementam a interface Plugin 40
  • 41
  • Aplicação de PluginsSão aplicados através do método applyda classe ProjectSomente uma vez 42
  • Aplicação de Plugins apply plugin: “java” apply plugin: org.gradle.api.plugins.JavaPlugin apply plugin: JavaPlugin 43
  • Exemplos de Pluginsincluídos na API padrão Java Maven War EAR Jetty Checkstyle Application Sonar Groovy Scala Eclipse Antlr 44
  • Outros PluginsAndroid TomcatAndroidAnnotations MacAppBundleArtifactory TemplatesCobertura UbuntuPackagerClojure JSLintGwt 45
  • Integração com o AntIntegração totalObjeto “ ant” expostoPossível importar um Build completo outasks individualmenteTargets como cidadãos de 1ª classe 46
  • Integração com o AntTargets da API padrão funcionam semnenhuma firulaTargets externos são facilmenteintegradosTargets passam a ser tratados comoTasks do Gradle 47
  • Executando Targets Ant no Gradle task antEcho << { ant.echo(message:”this is gradle calling an Ant target”) } task antEcho << { ant.echo ”this is gradle calling an Ant target” } :antEcho [ant:echo] this is gradle calling an Ant target BUILD SUCCESSFUL 48
  • Executando Targets Ant no Gradleconfigurations { pmd}dependencies { pmd “pmd:pmd:4.2.5”}task check << { ant.taskdef(name:”pmd”, classname:”net.sourceforge.pmd.ant.PMDTask”, classpath: configurations.pmd.asPath) ant.pmd(shortFilenames: “true”, failonruleviolation: “true”, rulesetfiles: file(“pmd-rules.xml”).toURI().toString()) { formatter(type:”text”, toConsole:”true”) fileset(dir:”src”) })} 49
  • Importando um Build completo ant.importBuild “build.xml” 50
  • Dependências entre Target e Tasks<target name=”antEcho”> <echo>This is Ant</echo></target>task hello(dependsOn:antEcho) << { println “and this is Gradle”} > gradle hello :antEcho [ant:echo] This is Ant and this is Gradle BUILD SUCCESSFUL 51
  • GradleWrapperPermite a utilização do Gradle sem quepra isso seja preciso instalar o Gradle namáquinaPensado para utilização em ser vidoresde integração contínua 52
  • GradleWrappertask generateWrapper(type:Wrapper) { gradleVersion=”1.0-rc-3”} > gradle generateWrapper :generateWrapper BUILD SUCCESSFULprojeto/ gradlew gradlew.bat gradle/wrapper/ gradle-wrapper.jar gradle-wrapper.properties 53
  • 54
  • https://github.com/marceloemanoel/ vraptor-js-controller > ./gradlew check jar 55
  • 56
  • Mas, eu não gosto de usar o terminal... 57
  • Mas, eu não gosto de usar o terminal... 57
  • Spring STS Gradle Support 58
  • Spring STS Gradle SupportImport WizardGerenciamento de Dependências(Semi-)AutomatizadoExtensão do Eclipse para Execução deTasks do Gradle 59
  • DocumentaçãoBuilding and Testing with Gradle (http://gradleware.com/registered-access?content=books/building-and-testing/)User Guide (http://gradle.org/docs/current/userguide/userguide_single.html)DSL Reference (http://gradle.org/docs/current/dsl/index.html)Tutoriais (http://gradle.org/docs/current/userguide/tutorials.html) 60
  • SuporteForum (http://forums.gradle.org/gradle)Gradleware (http://gradle.org/gradleware) 61
  • Quem já usa? 62
  • Quem já usa? 62
  • Quem já usa? 62
  • Mais informações 63
  • Mais informaçõeshttp://gradle.org 63
  • Estamoscontratando 64
  • 65
  • BUILD SUCCESSFUL 66