SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
10 Cool Facts about Gradle


   Evgeny Goldin, @evgeny_goldin
Who am I?

•   12 years in the industry

•   Mostly JS and JVM-related experience: Java, Groovy, Scala

•   Ant, Maven, Gradle, Artifactory, TeamCity, Jenkins

•   https://github.com/evgeny-goldin/

•   Write for blog, wiki, GroovyMag and “Methods & Tools”

•   Groovy conference speaker: G8Conf, Gr8US
http://evgeny-goldin.com/wiki/Maven-jenkins-plugin
Gradle is ..
1. Gradle is .. Fast

•   Not verbose by default

    • gradle	
  -­‐q	
  clean	
  build
    • gradle	
  -­‐i	
  clean	
  build
•   Cheksum-based incremental builds (tasks)

    • gradle	
  build
    • gradle	
  build
2. Gradle is .. Concise


  apply	
  plugin:	
  'java'
3. Gradle is .. Groovy DSL
subprojects	
  {

	
  	
  	
  	
  dependencies	
  {
	
  	
  	
  	
  	
  	
  	
  	
  compile	
  	
  	
  	
  	
  'org.twitter4j:twitter4j-­‐core:2.2.4'
	
  	
  	
  	
  	
  	
  	
  	
  runtime	
  	
  	
  	
  	
  'ch.qos.logback:logback-­‐classic:0.9.29'
	
  	
  	
  	
  	
  	
  	
  	
  testCompile	
  'org.spockframework:spock-­‐core:0.6-­‐groovy-­‐1.8-­‐SNAPSHOT'
	
  	
  	
  	
  }

	
  	
  	
  	
  task	
  copyCommonResources(	
  type:	
  Copy	
  )	
  {
	
  	
  	
  	
  	
  	
  	
  	
  from	
  project(	
  ':twitter4j'	
  ).file(	
  'common-­‐resources'	
  )
	
  	
  	
  	
  	
  	
  	
  	
  into	
  compileJava.destinationDir
	
  	
  	
  	
  }

	
  	
  	
  	
  jar.dependsOn	
  copyCommonResources
}
3. Gradle is .. Groovy DSL
subprojects	
  {

	
  	
  	
  	
  dependencies	
  {
	
  	
  	
  	
  	
  	
  	
  	
  compile	
  	
  	
  	
  	
  'org.twitter4j:twitter4j-­‐core:2.2.4'
	
  	
  	
  	
  	
  	
  	
  	
  runtime	
  	
  	
  	
  	
  'ch.qos.logback:logback-­‐classic:0.9.29'
	
  	
  	
  	
  	
  	
  	
  	
  testCompile	
  'org.spockframework:spock-­‐core:0.6-­‐groovy-­‐1.8-­‐SNAPSHOT'
	
  	
  	
  	
  }

	
  	
  	
  	
  task	
  copyCommonResources(	
  type:	
  Copy	
  )	
  {
	
  	
  	
  	
  	
  	
  	
  	
  from	
  project(	
  ':twitter4j'	
  ).file(	
  'common-­‐resources'	
  )
	
  	
  	
  	
  	
  	
  	
  	
  into	
  compileJava.destinationDir
	
  	
  	
  	
  }

	
  	
  	
  	
  jar.dependsOn	
  copyCommonResources
}
3. Gradle is .. Groovy DSL
subprojects	
  {

	
  	
  	
  	
  dependencies	
  {
	
  	
  	
  	
  	
  	
  	
  	
  compile	
  	
  	
  	
  	
  'org.twitter4j:twitter4j-­‐core:2.2.4'
	
  	
  	
  	
  	
  	
  	
  	
  runtime	
  	
  	
  	
  	
  'ch.qos.logback:logback-­‐classic:0.9.29'
	
  	
  	
  	
  	
  	
  	
  	
  testCompile	
  'org.spockframework:spock-­‐core:0.6-­‐groovy-­‐1.8-­‐SNAPSHOT'
	
  	
  	
  	
  }

	
  	
  	
  	
  jar.doFirst	
  {
	
  	
  	
  	
  	
  	
  	
  	
  copy	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  from	
  project(	
  ':twitter4j'	
  ).file(	
  'common-­‐resources'	
  )
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  into	
  compileJava.destinationDir
	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
}
4. Gradle is .. Groovy
	
  	
  	
  	
  task	
  assemblePlugin	
  <<	
  {

	
  	
  	
  	
  	
  	
  	
  	
  File	
  tempFile	
  =	
  File.createTempFile(	
  project.name,	
  null	
  )
	
  	
  	
  	
  	
  	
  	
  	
  tempFile.write(	
  file(	
  'src/main/resources/teamcity-­‐plugin.xml'	
  ).text.
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  replaceAll(	
  '@version@',	
  project.version	
  ))

	
  	
  	
  	
  	
  	
  	
  	
  File	
  compileLibs	
  =	
  new	
  File(	
  project.buildDir,	
  'compile-­‐libs'	
  )

	
  	
  	
  	
  	
  	
  	
  	
  (	
  configurations.compile.files	
  -­‐	
  configurations.provided.files	
  ).each	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  File	
  file	
  -­‐>	
  ant.copy(	
  file:	
  file,	
  todir:	
  compileLibs	
  )
	
  	
  	
  	
  	
  	
  	
  	
  }

	
  	
  	
  	
  	
  	
  	
  	
  ant.zip(	
  destfile:	
  destinationZip	
  )	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  zipfileset(	
  file:	
  tempFile,	
  	
  	
  	
  fullpath:	
  'teamcity-­‐plugin.xml'	
  )
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  zipfileset(	
  dir	
  :	
  compileLibs,	
  prefix	
  	
  :	
  'server'	
  )
	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
4. Gradle is .. Groovy
	
  	
  	
  	
  task	
  assemblePlugin	
  <<	
  {

	
  	
  	
  	
  	
  	
  	
  	
  File	
  tempFile	
  =	
  File.createTempFile(	
  project.name,	
  null	
  )
	
  	
  	
  	
  	
  	
  	
  	
  tempFile.write(	
  file(	
  'src/main/resources/teamcity-­‐plugin.xml'	
  ).text.
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  replaceAll(	
  '@version@',	
  project.version	
  ))

	
  	
  	
  	
  	
  	
  	
  	
  File	
  compileLibs	
  =	
  new	
  File(	
  project.buildDir,	
  'compile-­‐libs'	
  )

	
  	
  	
  	
  	
  	
  	
  	
  (	
  configurations.compile.files	
  -­‐	
  configurations.provided.files	
  ).each	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  File	
  file	
  -­‐>	
  ant.copy(	
  file:	
  file,	
  todir:	
  compileLibs	
  )
	
  	
  	
  	
  	
  	
  	
  	
  }

	
  	
  	
  	
  	
  	
  	
  	
  ant.zip(	
  destfile:	
  destinationZip	
  )	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  zipfileset(	
  file:	
  tempFile,	
  	
  	
  	
  fullpath:	
  'teamcity-­‐plugin.xml'	
  )
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  zipfileset(	
  dir	
  :	
  compileLibs,	
  prefix	
  	
  :	
  'server'	
  )
	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
4. Gradle is .. Groovy
	
  	
  	
  	
  task	
  assemblePlugin	
  <<	
  {

	
  	
  	
  	
  	
  	
  	
  	
  File	
  tempFile	
  =	
  File.createTempFile(	
  project.name,	
  null	
  )
	
  	
  	
  	
  	
  	
  	
  	
  tempFile.write(	
  file(	
  'src/main/resources/teamcity-­‐plugin.xml'	
  ).text.
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  replaceAll(	
  '@version@',	
  project.version	
  ))

	
  	
  	
  	
  	
  	
  	
  	
  File	
  compileLibs	
  =	
  new	
  File(	
  project.buildDir,	
  'compile-­‐libs'	
  )

	
  	
  	
  	
  	
  	
  	
  	
  (	
  configurations.compile.files	
  -­‐	
  configurations.provided.files	
  ).each	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  File	
  file	
  -­‐>	
  ant.copy(	
  file:	
  file,	
  todir:	
  compileLibs	
  )
	
  	
  	
  	
  	
  	
  	
  	
  }

	
  	
  	
  	
  	
  	
  	
  	
  ant.zip(	
  destfile:	
  destinationZip	
  )	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  zipfileset(	
  file:	
  tempFile,	
  	
  	
  	
  fullpath:	
  'teamcity-­‐plugin.xml'	
  )
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  zipfileset(	
  dir:	
  	
  compileLibs,	
  prefix	
  	
  :	
  'server'	
  )
	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
5. Gradle .. knows Groovy

apply	
  plugin:	
  'groovy'	
  

dependencies	
  {	
  	
  
	
  	
  	
  	
  groovy	
  	
  'org.codehaus.groovy:groovy-­‐all:1.8.1'
}
5. Gradle .. knows Scala

apply	
  plugin:	
  'scala'	
  

dependencies	
  {
	
  	
  	
  	
  scalaTools	
  'org.scala-­‐lang:scala-­‐compiler:2.9.1.RC4',
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'org.scala-­‐lang:scala-­‐library:2.9.1.RC4'
	
  	
  	
  	
  compile	
  	
  	
  	
  'org.scala-­‐lang:scala-­‐library:2.9.1.RC4'
}
6. Gradle .. knows Maven

•   Repositories: Maven/Artifactory

•   Dependencies: Maven/Ivy

•   Artifacts: gradle clean install

•   maven2gradle: https://github.com/jbaruch/maven2gradle

•   Import “pom.xml” - work in progress

•   Run Maven plugins or run Gradle from Maven - can be nice
7. Gradle .. knows testing
test	
  {	
  	
  	
  	
  
	
  	
  	
  	
  useJUnit()
	
  	
  	
  	
  useTestNG()
	
  	
  	
  	
  jvmArgs	
  ['-­‐Xmx512M']
	
  	
  	
  	
  include	
  '**/tests/special/**/*Test.class'
	
  	
  	
  	
  exclude	
  '**/Old*Test.class'
	
  	
  	
  	
  forkEvery	
  	
  	
  	
  	
  	
  	
  	
  =	
  30
	
  	
  	
  	
  maxParallelForks	
  =	
  Runtime.runtime.availableProcessors()
}
	
  
test	
  {
	
  	
  	
  	
  beforeTest	
  {	
  descr	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐>	
  ..	
  }
	
  	
  	
  	
  afterTest	
  	
  {	
  descr,	
  result	
  -­‐>	
  ..	
  }
	
  	
  	
  	
  beforeSuite{	
  descr	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐>	
  ..	
  }	
  	
  	
  	
  	
  
	
  	
  	
  	
  afterSuite	
  {	
  descr,	
  result	
  -­‐>	
  ..	
  }
}
7. Gradle .. knows testing
7. Gradle .. knows testing
test	
  {	
  	
  	
  	
  
	
  	
  	
  	
  useJUnit()
	
  	
  	
  	
  useTestNG()
	
  	
  	
  	
  jvmArgs	
  ['-­‐Xmx512M']
	
  	
  	
  	
  include	
  '**/tests/special/**/*Test.class'
	
  	
  	
  	
  exclude	
  '**/Old*Test.class'
	
  	
  	
  	
  forkEvery	
  	
  	
  	
  	
  	
  	
  	
  =	
  30
	
  	
  	
  	
  maxParallelForks	
  =	
  Runtime.runtime.availableProcessors()
}
	
  
test	
  {
	
  	
  	
  	
  beforeTest	
  {	
  descr	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐>	
  ..	
  }
	
  	
  	
  	
  afterTest	
  	
  {	
  descr,	
  result	
  -­‐>	
  ..	
  }
	
  	
  	
  	
  beforeSuite{	
  descr	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐>	
  ..	
  }	
  	
  	
  	
  	
  
	
  	
  	
  	
  afterSuite	
  {	
  descr,	
  result	
  -­‐>	
  ..	
  }
}
8. Gradle is .. Flexible

//	
  Multiple	
  source	
  directories

sourceSets.main.java.srcDirs	
  =	
  [	
  'src/main/java',	
  'srcAdditional/main/java'	
  ]
sourceSets.main.java.srcDirs	
  'srcAdditionalTwo/main/java'

//	
  Multiple	
  test	
  source	
  directories

sourceSets.test.java.srcDirs	
  =	
  [	
  'src/test/java',	
  'srcAdditional/test/java'	
  ]
sourceSets.test.java.srcDirs	
  'srcAdditionalTwo/test/java'
8. Gradle is .. Flexible
//	
  Multiple	
  dependencies	
  groups

configurations	
  {	
  myConf.extendsFrom	
  compile	
  }
	
  
dependencies	
  	
  	
  {
	
  	
  	
  	
  compile	
  	
  	
  	
  	
  'org.twitter4j:twitter4j-­‐core:2.2.4'
	
  	
  	
  	
  runtime	
  	
  	
  	
  	
  'ch.qos.logback:logback-­‐classic:0.9.29'
	
  	
  	
  	
  testCompile	
  'org.spockframework:spock-­‐core:0.6-­‐groovy-­‐1.8-­‐SNAPSHOT'
	
  	
  	
  	
  testRuntime	
  '	
  ...	
  '
	
  	
  	
  	
  
	
  	
  	
  	
  groovy	
  	
  	
  	
  	
  	
  'org.codehaus.groovy:groovy-­‐all:1.9.0-­‐beta-­‐2'
	
  	
  	
  	
  scalaTools	
  	
  'org.scala-­‐lang:scala-­‐compiler:2.9.1.RC4',
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'org.scala-­‐lang:scala-­‐library:2.9.1.RC4'
	
  	
  	
  	
  myConf	
  	
  	
  	
  	
  	
  'org.slf4j:slf4j-­‐api:1.6.2'
}
8. Gradle is .. Flexible
//	
  Multiple	
  artifacts	
  per	
  project:	
  sources	
  +	
  javadoc	
  jars

task	
  packageSources(	
  type:	
  Jar	
  )	
  {
	
  	
  	
  from	
  sourceSets.main.allSource
	
  	
  	
  classifier	
  =	
  'sources'
}	
  

task	
  packageJavadoc(	
  type:	
  Jar,	
  dependsOn:	
  'javadoc'	
  )	
  {
	
  	
  	
  from	
  javadoc.destinationDir
	
  	
  	
  classifier	
  =	
  'javadoc'
}
	
  
artifacts	
  {
	
  	
  archives(	
  packageSources	
  )
	
  	
  archives(	
  packageJavadoc	
  )
}
9. Gradle is .. Programmable
task	
  assembleApi(	
  type:	
  Jar,	
  dependsOn:	
  compileGroovyApi	
  )	
  {
	
  	
  	
  	
  appendix	
  	
  	
  	
  =	
  'api'
	
  	
  	
  	
  includes	
  	
  	
  	
  =	
  [	
  '**/api/**'	
  ]
	
  	
  	
  	
  from	
  compileGroovyApi.destinationDir
}


task	
  copyCommonResources(	
  type:	
  Copy	
  )	
  {
	
  	
  	
  	
  from	
  project(	
  ':twitter4j'	
  ).file(	
  'common-­‐resources'	
  )
	
  	
  	
  	
  into	
  compileJava.destinationDir
}

jar.dependsOn	
  copyCommonResources
jar.doFirst{	
  ..	
  }
jar.doLast	
  {	
  ..	
  }
9. Gradle is .. Programmable
task	
  assembleApi(	
  type:	
  Jar,	
  dependsOn:	
  compileGroovyApi	
  )	
  {
	
  	
  	
  	
  appendix	
  	
  	
  	
  =	
  'api'
	
  	
  	
  	
  includes	
  	
  	
  	
  =	
  [	
  '**/api/**'	
  ]
	
  	
  	
  	
  from	
  compileGroovyApi.destinationDir
}


task	
  copyCommonResources(	
  type:	
  Copy	
  )	
  {
	
  	
  	
  	
  from	
  project(	
  ':twitter4j'	
  ).file(	
  'common-­‐resources'	
  )
	
  	
  	
  	
  into	
  compileJava.destinationDir
}

jar.dependsOn	
  copyCommonResources
jar.doFirst{	
  ..	
  }
jar.doLast	
  {	
  ..	
  }
10. Gradle is .. Fun and Open!



•   gradle-user: http://gradle.1045684.n5.nabble.com/gradle-user-f1431424.html

•   gradle-dev: http://gradle.1045684.n5.nabble.com/gradle-dev-f1436218.html
More Examples
•   Multi-Project (Groovy + Scala):
    https://github.com/evgeny-goldin/gradle-examples

•   Groovy Project:
    https://github.com/evgeny-goldin/gcommons/blob/master/build.gradle

•   TeamCity Plugins:
    https://github.com/evgeny-goldin/teamcity-plugins/blob/master/build.gradle

•   Gradle Plugins:
    https://github.com/evgeny-goldin/gradle-plugins/blob/master/build.gradle
Resources

•   http://gradle.org/

•   http://evgeny-goldin.com/wiki/Gradle

•   https://github.com/gradle

•   https://github.com/gradleware

•   http://gradleware.com/
Feel free to contact:

•   Groovy, Gradle, Builds

•   @evgeny_goldin

•   evgenyg@gmail.com

•   http://evgeny-goldin.com/blog/

•   http://evgeny-goldin.com/wiki/

Mais conteúdo relacionado

Mais procurados

Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionSchalk Cronjé
 
Using the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM DevelopmentUsing the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM DevelopmentSchalk Cronjé
 
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGroovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGuillaume Laforge
 
Gradle talk, Javarsovia 2010
Gradle talk, Javarsovia 2010Gradle talk, Javarsovia 2010
Gradle talk, Javarsovia 2010Tomek Kaczanowski
 
Custom deployments with sbt-native-packager
Custom deployments with sbt-native-packagerCustom deployments with sbt-native-packager
Custom deployments with sbt-native-packagerGaryCoady
 
Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerMarcus Lönnberg
 
Cool JVM Tools to Help You Test
Cool JVM Tools to Help You TestCool JVM Tools to Help You Test
Cool JVM Tools to Help You TestSchalk Cronjé
 
Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)Joachim Baumann
 
Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Paul Chao
 
Idiomatic gradle plugin writing
Idiomatic gradle plugin writingIdiomatic gradle plugin writing
Idiomatic gradle plugin writingSchalk Cronjé
 
The Gradle in Ratpack: Dissected
The Gradle in Ratpack: DissectedThe Gradle in Ratpack: Dissected
The Gradle in Ratpack: DissectedDavid Carr
 
Challenges of container configuration
Challenges of container configurationChallenges of container configuration
Challenges of container configurationlutter
 
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers VersionCool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers VersionSchalk Cronjé
 
うさぎ組 in G* WorkShop -うさみみの日常-
うさぎ組 in G* WorkShop -うさみみの日常-うさぎ組 in G* WorkShop -うさみみの日常-
うさぎ組 in G* WorkShop -うさみみの日常-kyon mm
 
Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016Schalk Cronjé
 

Mais procurados (19)

DevOps Odessa #TechTalks 21.01.2020
DevOps Odessa #TechTalks 21.01.2020DevOps Odessa #TechTalks 21.01.2020
DevOps Odessa #TechTalks 21.01.2020
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 version
 
Using the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM DevelopmentUsing the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM Development
 
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGroovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
 
Gradle talk, Javarsovia 2010
Gradle talk, Javarsovia 2010Gradle talk, Javarsovia 2010
Gradle talk, Javarsovia 2010
 
Jenkins' shared libraries in action
Jenkins' shared libraries in actionJenkins' shared libraries in action
Jenkins' shared libraries in action
 
Custom deployments with sbt-native-packager
Custom deployments with sbt-native-packagerCustom deployments with sbt-native-packager
Custom deployments with sbt-native-packager
 
Maven
MavenMaven
Maven
 
Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with Docker
 
Cool JVM Tools to Help You Test
Cool JVM Tools to Help You TestCool JVM Tools to Help You Test
Cool JVM Tools to Help You Test
 
Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)
 
Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Docker workshop 0507 Taichung
Docker workshop 0507 Taichung
 
Idiomatic gradle plugin writing
Idiomatic gradle plugin writingIdiomatic gradle plugin writing
Idiomatic gradle plugin writing
 
The Gradle in Ratpack: Dissected
The Gradle in Ratpack: DissectedThe Gradle in Ratpack: Dissected
The Gradle in Ratpack: Dissected
 
Challenges of container configuration
Challenges of container configurationChallenges of container configuration
Challenges of container configuration
 
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers VersionCool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
 
うさぎ組 in G* WorkShop -うさみみの日常-
うさぎ組 in G* WorkShop -うさみみの日常-うさぎ組 in G* WorkShop -うさみみの日常-
うさぎ組 in G* WorkShop -うさみみの日常-
 
Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016
 

Destaque

Surrealism and abstract expressionism
Surrealism and abstract expressionismSurrealism and abstract expressionism
Surrealism and abstract expressionismalquea13
 
Personal Branding In A Wired World
Personal Branding In A Wired WorldPersonal Branding In A Wired World
Personal Branding In A Wired WorldValeria Maltoni
 
How to prepare for that first investment property(finsihed)
How to prepare for that first investment property(finsihed)How to prepare for that first investment property(finsihed)
How to prepare for that first investment property(finsihed)RandyBett
 
trabajo con fotografia digital
trabajo con fotografia digitaltrabajo con fotografia digital
trabajo con fotografia digitalRicardo Mejia
 
Ski Classes in Tsakhkadzor_eng
Ski Classes in Tsakhkadzor_engSki Classes in Tsakhkadzor_eng
Ski Classes in Tsakhkadzor_engPort Ayas
 
Siena International Photo Awards Honorable Mentions: Category Travel
Siena International Photo Awards Honorable  Mentions:  Category TravelSiena International Photo Awards Honorable  Mentions:  Category Travel
Siena International Photo Awards Honorable Mentions: Category Travelmaditabalnco
 
תוכנית שיווק באינטרנט
תוכנית שיווק באינטרנטתוכנית שיווק באינטרנט
תוכנית שיווק באינטרנטIsaac Nehmad
 
20141018群馬ベンチャーサミット
20141018群馬ベンチャーサミット20141018群馬ベンチャーサミット
20141018群馬ベンチャーサミットKyo Satani
 
活著都是特別日子
活著都是特別日子活著都是特別日子
活著都是特別日子David Leung
 
Get More Done with Less: A Team Approach to Delivering Results for Career Ce...
Get More Done with Less:  A Team Approach to Delivering Results for Career Ce...Get More Done with Less:  A Team Approach to Delivering Results for Career Ce...
Get More Done with Less: A Team Approach to Delivering Results for Career Ce...Hannah Morgan
 
Social Media Strategies With an Edu Angle - Social3i Consulting - April 2011
Social Media Strategies With an Edu Angle - Social3i Consulting - April 2011Social Media Strategies With an Edu Angle - Social3i Consulting - April 2011
Social Media Strategies With an Edu Angle - Social3i Consulting - April 2011social3i
 
Walmart Store Inc 1208412318223884 8
Walmart Store Inc 1208412318223884 8Walmart Store Inc 1208412318223884 8
Walmart Store Inc 1208412318223884 8rogersjr33
 
Suicide prevention among students
Suicide prevention among studentsSuicide prevention among students
Suicide prevention among studentsDr Abhijeet Dawle
 
Impacto de las tecnologias de la informacion en los cuidados
Impacto de las tecnologias de la informacion en los cuidadosImpacto de las tecnologias de la informacion en los cuidados
Impacto de las tecnologias de la informacion en los cuidadosDavid Novillo Ortiz, MLIS, PhD
 
Defining Test Competence
Defining Test CompetenceDefining Test Competence
Defining Test CompetenceJohan Hoberg
 
Rediseño de la Tipografía
Rediseño de la TipografíaRediseño de la Tipografía
Rediseño de la TipografíaAlan Izait B M
 
Kompakt katalog gb
Kompakt katalog gbKompakt katalog gb
Kompakt katalog gbKavaler
 

Destaque (20)

Surrealism and abstract expressionism
Surrealism and abstract expressionismSurrealism and abstract expressionism
Surrealism and abstract expressionism
 
Bread
BreadBread
Bread
 
Personal Branding In A Wired World
Personal Branding In A Wired WorldPersonal Branding In A Wired World
Personal Branding In A Wired World
 
Virusni hepatitis, hrvatska konsenzus konferencija 2013.
Virusni hepatitis, hrvatska konsenzus konferencija 2013.Virusni hepatitis, hrvatska konsenzus konferencija 2013.
Virusni hepatitis, hrvatska konsenzus konferencija 2013.
 
How to prepare for that first investment property(finsihed)
How to prepare for that first investment property(finsihed)How to prepare for that first investment property(finsihed)
How to prepare for that first investment property(finsihed)
 
trabajo con fotografia digital
trabajo con fotografia digitaltrabajo con fotografia digital
trabajo con fotografia digital
 
Ski Classes in Tsakhkadzor_eng
Ski Classes in Tsakhkadzor_engSki Classes in Tsakhkadzor_eng
Ski Classes in Tsakhkadzor_eng
 
Siena International Photo Awards Honorable Mentions: Category Travel
Siena International Photo Awards Honorable  Mentions:  Category TravelSiena International Photo Awards Honorable  Mentions:  Category Travel
Siena International Photo Awards Honorable Mentions: Category Travel
 
תוכנית שיווק באינטרנט
תוכנית שיווק באינטרנטתוכנית שיווק באינטרנט
תוכנית שיווק באינטרנט
 
20141018群馬ベンチャーサミット
20141018群馬ベンチャーサミット20141018群馬ベンチャーサミット
20141018群馬ベンチャーサミット
 
活著都是特別日子
活著都是特別日子活著都是特別日子
活著都是特別日子
 
Get More Done with Less: A Team Approach to Delivering Results for Career Ce...
Get More Done with Less:  A Team Approach to Delivering Results for Career Ce...Get More Done with Less:  A Team Approach to Delivering Results for Career Ce...
Get More Done with Less: A Team Approach to Delivering Results for Career Ce...
 
Social Media Strategies With an Edu Angle - Social3i Consulting - April 2011
Social Media Strategies With an Edu Angle - Social3i Consulting - April 2011Social Media Strategies With an Edu Angle - Social3i Consulting - April 2011
Social Media Strategies With an Edu Angle - Social3i Consulting - April 2011
 
Walmart Store Inc 1208412318223884 8
Walmart Store Inc 1208412318223884 8Walmart Store Inc 1208412318223884 8
Walmart Store Inc 1208412318223884 8
 
Suicide prevention among students
Suicide prevention among studentsSuicide prevention among students
Suicide prevention among students
 
Impacto de las tecnologias de la informacion en los cuidados
Impacto de las tecnologias de la informacion en los cuidadosImpacto de las tecnologias de la informacion en los cuidados
Impacto de las tecnologias de la informacion en los cuidados
 
Defining Test Competence
Defining Test CompetenceDefining Test Competence
Defining Test Competence
 
Rediseño de la Tipografía
Rediseño de la TipografíaRediseño de la Tipografía
Rediseño de la Tipografía
 
Kompakt katalog gb
Kompakt katalog gbKompakt katalog gb
Kompakt katalog gb
 
Evaluación de las Necesidades de Dispositivos Médicos
Evaluación de las Necesidades de Dispositivos MédicosEvaluación de las Necesidades de Dispositivos Médicos
Evaluación de las Necesidades de Dispositivos Médicos
 

Semelhante a 10 Cool Facts about Gradle

Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Tino Isnich
 
Gradle - Build system evolved
Gradle - Build system evolvedGradle - Build system evolved
Gradle - Build system evolvedBhagwat Kumar
 
Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new buildIgor Khotin
 
Gradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting forGradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting forCorneil du Plessis
 
Gradle - small introduction
Gradle - small introductionGradle - small introduction
Gradle - small introductionIgor Popov
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation ToolIzzet Mustafaiev
 
Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!Corneil du Plessis
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbtFabio Fumarola
 
Config/BuildConfig
Config/BuildConfigConfig/BuildConfig
Config/BuildConfigVijay Shukla
 
An Introduction to Gradle for Java Developers
An Introduction to Gradle for Java DevelopersAn Introduction to Gradle for Java Developers
An Introduction to Gradle for Java DevelopersKostas Saidis
 
Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Jared Burrows
 
Config BuildConfig
Config BuildConfigConfig BuildConfig
Config BuildConfigVijay Shukla
 
Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)Future Insights
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with GradleRyan Cuprak
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with GradleRyan Cuprak
 

Semelhante a 10 Cool Facts about Gradle (20)

Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01
 
Gradle
GradleGradle
Gradle
 
OpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with GradleOpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with Gradle
 
Gradle - Build system evolved
Gradle - Build system evolvedGradle - Build system evolved
Gradle - Build system evolved
 
Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new build
 
Gradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting forGradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting for
 
Gradle - small introduction
Gradle - small introductionGradle - small introduction
Gradle - small introduction
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation Tool
 
Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!
 
Android presentation - Gradle ++
Android presentation - Gradle ++Android presentation - Gradle ++
Android presentation - Gradle ++
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
Agile Swift
Agile SwiftAgile Swift
Agile Swift
 
Config/BuildConfig
Config/BuildConfigConfig/BuildConfig
Config/BuildConfig
 
Config BuildConfig
Config BuildConfigConfig BuildConfig
Config BuildConfig
 
An Introduction to Gradle for Java Developers
An Introduction to Gradle for Java DevelopersAn Introduction to Gradle for Java Developers
An Introduction to Gradle for Java Developers
 
Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)
 
Config BuildConfig
Config BuildConfigConfig BuildConfig
Config BuildConfig
 
Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 

Mais de Evgeny Goldin

Polyglot Gradle with Node.js and Play
Polyglot Gradle with Node.js and PlayPolyglot Gradle with Node.js and Play
Polyglot Gradle with Node.js and PlayEvgeny Goldin
 
Node.js meets jenkins
Node.js meets jenkinsNode.js meets jenkins
Node.js meets jenkinsEvgeny Goldin
 
Functional Programming in Groovy
Functional Programming in GroovyFunctional Programming in Groovy
Functional Programming in GroovyEvgeny Goldin
 
Spock Extensions Anatomy
Spock Extensions AnatomySpock Extensions Anatomy
Spock Extensions AnatomyEvgeny Goldin
 
Start Writing Groovy
Start Writing GroovyStart Writing Groovy
Start Writing GroovyEvgeny Goldin
 

Mais de Evgeny Goldin (9)

Alexa skills
Alexa skillsAlexa skills
Alexa skills
 
Polyglot Gradle with Node.js and Play
Polyglot Gradle with Node.js and PlayPolyglot Gradle with Node.js and Play
Polyglot Gradle with Node.js and Play
 
Node.js meets jenkins
Node.js meets jenkinsNode.js meets jenkins
Node.js meets jenkins
 
Functional Programming in Groovy
Functional Programming in GroovyFunctional Programming in Groovy
Functional Programming in Groovy
 
Release It!
Release It!Release It!
Release It!
 
Spock Extensions Anatomy
Spock Extensions AnatomySpock Extensions Anatomy
Spock Extensions Anatomy
 
Start Writing Groovy
Start Writing GroovyStart Writing Groovy
Start Writing Groovy
 
Groovy Maven Builds
Groovy Maven BuildsGroovy Maven Builds
Groovy Maven Builds
 
Maven Plugins
Maven PluginsMaven Plugins
Maven Plugins
 

Último

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 

Último (20)

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

10 Cool Facts about Gradle

  • 1. 10 Cool Facts about Gradle Evgeny Goldin, @evgeny_goldin
  • 2. Who am I? • 12 years in the industry • Mostly JS and JVM-related experience: Java, Groovy, Scala • Ant, Maven, Gradle, Artifactory, TeamCity, Jenkins • https://github.com/evgeny-goldin/ • Write for blog, wiki, GroovyMag and “Methods & Tools” • Groovy conference speaker: G8Conf, Gr8US
  • 5. 1. Gradle is .. Fast • Not verbose by default • gradle  -­‐q  clean  build • gradle  -­‐i  clean  build • Cheksum-based incremental builds (tasks) • gradle  build • gradle  build
  • 6. 2. Gradle is .. Concise apply  plugin:  'java'
  • 7. 3. Gradle is .. Groovy DSL subprojects  {        dependencies  {                compile          'org.twitter4j:twitter4j-­‐core:2.2.4'                runtime          'ch.qos.logback:logback-­‐classic:0.9.29'                testCompile  'org.spockframework:spock-­‐core:0.6-­‐groovy-­‐1.8-­‐SNAPSHOT'        }        task  copyCommonResources(  type:  Copy  )  {                from  project(  ':twitter4j'  ).file(  'common-­‐resources'  )                into  compileJava.destinationDir        }        jar.dependsOn  copyCommonResources }
  • 8. 3. Gradle is .. Groovy DSL subprojects  {        dependencies  {                compile          'org.twitter4j:twitter4j-­‐core:2.2.4'                runtime          'ch.qos.logback:logback-­‐classic:0.9.29'                testCompile  'org.spockframework:spock-­‐core:0.6-­‐groovy-­‐1.8-­‐SNAPSHOT'        }        task  copyCommonResources(  type:  Copy  )  {                from  project(  ':twitter4j'  ).file(  'common-­‐resources'  )                into  compileJava.destinationDir        }        jar.dependsOn  copyCommonResources }
  • 9. 3. Gradle is .. Groovy DSL subprojects  {        dependencies  {                compile          'org.twitter4j:twitter4j-­‐core:2.2.4'                runtime          'ch.qos.logback:logback-­‐classic:0.9.29'                testCompile  'org.spockframework:spock-­‐core:0.6-­‐groovy-­‐1.8-­‐SNAPSHOT'        }        jar.doFirst  {                copy  {                        from  project(  ':twitter4j'  ).file(  'common-­‐resources'  )                        into  compileJava.destinationDir                }        } }
  • 10. 4. Gradle is .. Groovy        task  assemblePlugin  <<  {                File  tempFile  =  File.createTempFile(  project.name,  null  )                tempFile.write(  file(  'src/main/resources/teamcity-­‐plugin.xml'  ).text.                                                replaceAll(  '@version@',  project.version  ))                File  compileLibs  =  new  File(  project.buildDir,  'compile-­‐libs'  )                (  configurations.compile.files  -­‐  configurations.provided.files  ).each  {                        File  file  -­‐>  ant.copy(  file:  file,  todir:  compileLibs  )                }                ant.zip(  destfile:  destinationZip  )  {                        zipfileset(  file:  tempFile,        fullpath:  'teamcity-­‐plugin.xml'  )                        zipfileset(  dir  :  compileLibs,  prefix    :  'server'  )                }        }
  • 11. 4. Gradle is .. Groovy        task  assemblePlugin  <<  {                File  tempFile  =  File.createTempFile(  project.name,  null  )                tempFile.write(  file(  'src/main/resources/teamcity-­‐plugin.xml'  ).text.                                                replaceAll(  '@version@',  project.version  ))                File  compileLibs  =  new  File(  project.buildDir,  'compile-­‐libs'  )                (  configurations.compile.files  -­‐  configurations.provided.files  ).each  {                        File  file  -­‐>  ant.copy(  file:  file,  todir:  compileLibs  )                }                ant.zip(  destfile:  destinationZip  )  {                        zipfileset(  file:  tempFile,        fullpath:  'teamcity-­‐plugin.xml'  )                        zipfileset(  dir  :  compileLibs,  prefix    :  'server'  )                }        }
  • 12. 4. Gradle is .. Groovy        task  assemblePlugin  <<  {                File  tempFile  =  File.createTempFile(  project.name,  null  )                tempFile.write(  file(  'src/main/resources/teamcity-­‐plugin.xml'  ).text.                                                replaceAll(  '@version@',  project.version  ))                File  compileLibs  =  new  File(  project.buildDir,  'compile-­‐libs'  )                (  configurations.compile.files  -­‐  configurations.provided.files  ).each  {                        File  file  -­‐>  ant.copy(  file:  file,  todir:  compileLibs  )                }                ant.zip(  destfile:  destinationZip  )  {                        zipfileset(  file:  tempFile,        fullpath:  'teamcity-­‐plugin.xml'  )                        zipfileset(  dir:    compileLibs,  prefix    :  'server'  )                }        }
  • 13. 5. Gradle .. knows Groovy apply  plugin:  'groovy'   dependencies  {            groovy    'org.codehaus.groovy:groovy-­‐all:1.8.1' }
  • 14. 5. Gradle .. knows Scala apply  plugin:  'scala'   dependencies  {        scalaTools  'org.scala-­‐lang:scala-­‐compiler:2.9.1.RC4',                              'org.scala-­‐lang:scala-­‐library:2.9.1.RC4'        compile        'org.scala-­‐lang:scala-­‐library:2.9.1.RC4' }
  • 15. 6. Gradle .. knows Maven • Repositories: Maven/Artifactory • Dependencies: Maven/Ivy • Artifacts: gradle clean install • maven2gradle: https://github.com/jbaruch/maven2gradle • Import “pom.xml” - work in progress • Run Maven plugins or run Gradle from Maven - can be nice
  • 16. 7. Gradle .. knows testing test  {                useJUnit()        useTestNG()        jvmArgs  ['-­‐Xmx512M']        include  '**/tests/special/**/*Test.class'        exclude  '**/Old*Test.class'        forkEvery                =  30        maxParallelForks  =  Runtime.runtime.availableProcessors() }   test  {        beforeTest  {  descr                  -­‐>  ..  }        afterTest    {  descr,  result  -­‐>  ..  }        beforeSuite{  descr                  -­‐>  ..  }                  afterSuite  {  descr,  result  -­‐>  ..  } }
  • 17. 7. Gradle .. knows testing
  • 18. 7. Gradle .. knows testing test  {                useJUnit()        useTestNG()        jvmArgs  ['-­‐Xmx512M']        include  '**/tests/special/**/*Test.class'        exclude  '**/Old*Test.class'        forkEvery                =  30        maxParallelForks  =  Runtime.runtime.availableProcessors() }   test  {        beforeTest  {  descr                  -­‐>  ..  }        afterTest    {  descr,  result  -­‐>  ..  }        beforeSuite{  descr                  -­‐>  ..  }                  afterSuite  {  descr,  result  -­‐>  ..  } }
  • 19.
  • 20.
  • 21. 8. Gradle is .. Flexible //  Multiple  source  directories sourceSets.main.java.srcDirs  =  [  'src/main/java',  'srcAdditional/main/java'  ] sourceSets.main.java.srcDirs  'srcAdditionalTwo/main/java' //  Multiple  test  source  directories sourceSets.test.java.srcDirs  =  [  'src/test/java',  'srcAdditional/test/java'  ] sourceSets.test.java.srcDirs  'srcAdditionalTwo/test/java'
  • 22. 8. Gradle is .. Flexible //  Multiple  dependencies  groups configurations  {  myConf.extendsFrom  compile  }   dependencies      {        compile          'org.twitter4j:twitter4j-­‐core:2.2.4'        runtime          'ch.qos.logback:logback-­‐classic:0.9.29'        testCompile  'org.spockframework:spock-­‐core:0.6-­‐groovy-­‐1.8-­‐SNAPSHOT'        testRuntime  '  ...  '                groovy            'org.codehaus.groovy:groovy-­‐all:1.9.0-­‐beta-­‐2'        scalaTools    'org.scala-­‐lang:scala-­‐compiler:2.9.1.RC4',                                'org.scala-­‐lang:scala-­‐library:2.9.1.RC4'        myConf            'org.slf4j:slf4j-­‐api:1.6.2' }
  • 23. 8. Gradle is .. Flexible //  Multiple  artifacts  per  project:  sources  +  javadoc  jars task  packageSources(  type:  Jar  )  {      from  sourceSets.main.allSource      classifier  =  'sources' }   task  packageJavadoc(  type:  Jar,  dependsOn:  'javadoc'  )  {      from  javadoc.destinationDir      classifier  =  'javadoc' }   artifacts  {    archives(  packageSources  )    archives(  packageJavadoc  ) }
  • 24. 9. Gradle is .. Programmable task  assembleApi(  type:  Jar,  dependsOn:  compileGroovyApi  )  {        appendix        =  'api'        includes        =  [  '**/api/**'  ]        from  compileGroovyApi.destinationDir } task  copyCommonResources(  type:  Copy  )  {        from  project(  ':twitter4j'  ).file(  'common-­‐resources'  )        into  compileJava.destinationDir } jar.dependsOn  copyCommonResources jar.doFirst{  ..  } jar.doLast  {  ..  }
  • 25. 9. Gradle is .. Programmable task  assembleApi(  type:  Jar,  dependsOn:  compileGroovyApi  )  {        appendix        =  'api'        includes        =  [  '**/api/**'  ]        from  compileGroovyApi.destinationDir } task  copyCommonResources(  type:  Copy  )  {        from  project(  ':twitter4j'  ).file(  'common-­‐resources'  )        into  compileJava.destinationDir } jar.dependsOn  copyCommonResources jar.doFirst{  ..  } jar.doLast  {  ..  }
  • 26. 10. Gradle is .. Fun and Open! • gradle-user: http://gradle.1045684.n5.nabble.com/gradle-user-f1431424.html • gradle-dev: http://gradle.1045684.n5.nabble.com/gradle-dev-f1436218.html
  • 27. More Examples • Multi-Project (Groovy + Scala): https://github.com/evgeny-goldin/gradle-examples • Groovy Project: https://github.com/evgeny-goldin/gcommons/blob/master/build.gradle • TeamCity Plugins: https://github.com/evgeny-goldin/teamcity-plugins/blob/master/build.gradle • Gradle Plugins: https://github.com/evgeny-goldin/gradle-plugins/blob/master/build.gradle
  • 28. Resources • http://gradle.org/ • http://evgeny-goldin.com/wiki/Gradle • https://github.com/gradle • https://github.com/gradleware • http://gradleware.com/
  • 29. Feel free to contact: • Groovy, Gradle, Builds • @evgeny_goldin • evgenyg@gmail.com • http://evgeny-goldin.com/blog/ • http://evgeny-goldin.com/wiki/