Top Banner
Gradle 2. Breaking stereotypes Sergey Morenets, [email protected] June, 17 2015
82
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Gradle 2.Breaking stereotypes

Gradle 2.Breaking stereotypes

Sergey Morenets, [email protected], 17 2015

Page 2: Gradle 2.Breaking stereotypes

About author• Works in IT since 2000• 11 year of Java SE/EE experience• Regular speaker at Java conferences• Author of “Development of Java applications” and

“Main errors in Java programming ”books• Founder of http://it-simulator.com• 3 years of Gradle usage

Page 3: Gradle 2.Breaking stereotypes

Agenda

Page 4: Gradle 2.Breaking stereotypes

Agenda

Page 5: Gradle 2.Breaking stereotypes

Apache Ant• Offers extreme flexibility• Imposes no convention or project standards• Maintenance headache• Support Ruby, Groovy, JavaScript, Judoscript,

Jython scripting

Page 6: Gradle 2.Breaking stereotypes

Apache Ivy• Agile dependency manager• Transitive dependencies• Ant & Maven integration• Enhanced support of repositories

Page 7: Gradle 2.Breaking stereotypes

Apache Maven

• Support for dependency management• Standard project layout• Archetypes• Hard customization• Declarative approach• Plugin execution framework

Page 8: Gradle 2.Breaking stereotypes

Build systems

Page 9: Gradle 2.Breaking stereotypes

Apache Maven

Page 10: Gradle 2.Breaking stereotypes

Ant plugin

Page 11: Gradle 2.Breaking stereotypes
Page 12: Gradle 2.Breaking stereotypes
Page 13: Gradle 2.Breaking stereotypes
Page 14: Gradle 2.Breaking stereotypes

Groovy plugin

Page 15: Gradle 2.Breaking stereotypes
Page 16: Gradle 2.Breaking stereotypes

Echo plugin

Page 17: Gradle 2.Breaking stereotypes
Page 18: Gradle 2.Breaking stereotypes

Gradle

Page 19: Gradle 2.Breaking stereotypes
Page 20: Gradle 2.Breaking stereotypes
Page 21: Gradle 2.Breaking stereotypes

Maven

Page 22: Gradle 2.Breaking stereotypes

Gradle

Page 23: Gradle 2.Breaking stereotypes

Gradle

Page 24: Gradle 2.Breaking stereotypes
Page 25: Gradle 2.Breaking stereotypes
Page 26: Gradle 2.Breaking stereotypes

Maven

Page 27: Gradle 2.Breaking stereotypes

Gradle

Page 28: Gradle 2.Breaking stereotypes
Page 29: Gradle 2.Breaking stereotypes

Issue #1. XML

• Large and complex files are hard to understand• Hierarchical structure limits the expressivenessof the format• Good format for the data and complex for the

flow

Page 30: Gradle 2.Breaking stereotypes

Hans Dockter• Founder of Gradle and Gradleware• 13 years of experience as a software developer,

team leader, architect, trainer, and mentor• Previously worked at Jboss and founded Jboss-IDE• Holds a Diploma in Physics with a minor in

Computer Science• Admirer of domain-driven-design

Page 31: Gradle 2.Breaking stereotypes

Slogan• Make the impossible possible• Make the possible easy• Make the easy elegant

Page 32: Gradle 2.Breaking stereotypes

Solution #1. Groovy

• An agile and dynamic language for the Java Virtual Machine

• Makes modern programming features available to Java developers with almost-zero learning curve

• Provides the ability to statically type check and statically compile your code for robustness and performance

• Share base syntax, type system, packages hierarchy with Java

• Every Gradle build file is Groovy script

Page 33: Gradle 2.Breaking stereotypes

Gradle

Page 34: Gradle 2.Breaking stereotypes

Gradle• Development started in Apr 2008• Current version 2.4 released in May 2015• Default build tool for Android OS

Page 35: Gradle 2.Breaking stereotypes

Gradle overview

• A flexible general purpose build tool• Programming tool• Declarative builds and build-by-convention• Multi-project support• Powerful dependency management

Page 36: Gradle 2.Breaking stereotypes

Development

Version Release dateMaven 1.0 2004

Maven 2.0 2005

Maven 3.0 2010

Maven 3.1 2013

Maven 3.3 2015

Page 37: Gradle 2.Breaking stereotypes

Development

Version Release dateGradle 0.7 2009

Gradle 1.0 2012

Gradle 1.5 2013

Gradle 2.0 2014

Gradle 2.4 2015

Page 38: Gradle 2.Breaking stereotypes

Build structure

Page 39: Gradle 2.Breaking stereotypes

Hello world

$ gradle helloWorld

Page 40: Gradle 2.Breaking stereotypes

build.gradle

Page 41: Gradle 2.Breaking stereotypes

Maven pom

Page 42: Gradle 2.Breaking stereotypes

Sample project

Page 43: Gradle 2.Breaking stereotypes

Sample project

Page 44: Gradle 2.Breaking stereotypes

Custom task

• Writes audit information at the end of the build• Audit information includes project name and build

timestamp• Audit files are located in the separate folder

Page 45: Gradle 2.Breaking stereotypes

Custom task

Page 46: Gradle 2.Breaking stereotypes

Custom task

Page 47: Gradle 2.Breaking stereotypes
Page 48: Gradle 2.Breaking stereotypes

Cache everything

• Remote metadata and artifacts• Transitive dependency resolution• Build execution plan• Plugin inputs and outputs• Test results

Page 49: Gradle 2.Breaking stereotypes

Daemon

• Improves startup and execution time of Gradle• Initial Gradle command forks daemon process• Subsequent Gradle commands reuse the build

daemon• If daemon is currently busy then new daemon

process is started on-demand• Useful for small tasks execution• Expires after 3 hours of idle time

Page 50: Gradle 2.Breaking stereotypes

gradle.properties

• org.gradle.daemon=true• org.gradle.configureondemand=true• org.gradle.parallel=true• org.gradle.java.home=C:\\Program Files\\Java\\

jdk1.8.0_45\\• org.gradle.jvmargs=-Xmx100m

Page 51: Gradle 2.Breaking stereotypes

Test execution

# of threads

H2 – time(sec) MySQL – time(sec)

1 24,4 27,5

2 31,1 36,9

4 46,2 51,1

8 71,1 80,5

Page 52: Gradle 2.Breaking stereotypes

Plugin• Reusable pieces of build logic• Can be used in different projects/builds

Page 53: Gradle 2.Breaking stereotypes
Page 54: Gradle 2.Breaking stereotypes

Plugin portal

Page 55: Gradle 2.Breaking stereotypes

Custom plugin

gradle helloWorld

Page 56: Gradle 2.Breaking stereotypes

Maven

Page 57: Gradle 2.Breaking stereotypes

Gradle

Page 58: Gradle 2.Breaking stereotypes

Integrates with everything

Page 59: Gradle 2.Breaking stereotypes

Gradle and Maven

Page 60: Gradle 2.Breaking stereotypes

Comparison

• Maven 3.3.3• Gradle 2.4• JDK 1.8.0.45• Intel Core i7, 4 cores, 16 GB• Multi-project and single project builds• Optimized and default modes

Page 61: Gradle 2.Breaking stereotypes

Multi-project

Operation Gradle (opt)

Gradle (daemon)

Gradle(no daemon)

Maven

Maven (parall)

Build(sec) 8,03 10,73 13,68 12,40 13,02

Inc build(sec)

1,92 2,16 4,74 4,62 4,64

Clean(sec) 1,03 1,20 2,77 1,71 1,70

Page 62: Gradle 2.Breaking stereotypes

Gradle

Optimized Not optimized

Page 63: Gradle 2.Breaking stereotypes

Maven

Optimized Not optimized

Page 64: Gradle 2.Breaking stereotypes

Single project

Operation Gradle (opt)

Gradle (daemon)

Gradle(no daemon)

Maven

Maven (parall)

Build(sec) 1,41 1,46 4,55 2,38 2,37

Inc build(sec)

0,95 1,01 3,27 0,88 0,86

Clean(sec) 0,89 0,95 2,68 0,24 0,19

Page 65: Gradle 2.Breaking stereotypes

Maven converter

• maven2Gradle is obsolete now• Build init plugin converts:

o POM settingso Dependencieso Propertieso Java compiler settingso Single- and multi-project settingso Packaging of sources and tests

Page 66: Gradle 2.Breaking stereotypes

Repositories

Page 67: Gradle 2.Breaking stereotypes
Page 68: Gradle 2.Breaking stereotypes

Maven Scope

Page 69: Gradle 2.Breaking stereotypes

Maven Scope

Page 70: Gradle 2.Breaking stereotypes

Configurations

Page 71: Gradle 2.Breaking stereotypes

Version management

Page 72: Gradle 2.Breaking stereotypes

Version management

Page 73: Gradle 2.Breaking stereotypes

Profiles

• build.gradle• dev-profile.gradle• test-profile.gradle

• $ gradle –Pprofile=dev build

Page 74: Gradle 2.Breaking stereotypes

Skip tasks

• $ gradle -PskipTests

Page 75: Gradle 2.Breaking stereotypes

Caching

• Gradle caches all compiles scripts by default• Compiled scripts are put into .gradle folder• Gradle uses compiled version if the script hasn’t

changed• --recompile-scripts option discards cache

Page 76: Gradle 2.Breaking stereotypes

Wrapper

• Preferred way of starting a Gradle build• Gradle will be automatically downloaded via

wrapper• Includes shell script• Useful for CI tasks

Page 77: Gradle 2.Breaking stereotypes
Page 78: Gradle 2.Breaking stereotypes

Pros• Native Java/Scala/Groovy support• Ant/Maven/Ivy integration• Full IDE support• Flexible DSL• Multiple third-party plugins(70+)• Declarative & imperative approaches• Rapid development• Performance

Page 79: Gradle 2.Breaking stereotypes

Cons• Compilation & run-time issues• Larger learning curve• Less community & industry support

Page 80: Gradle 2.Breaking stereotypes

Future

Page 81: Gradle 2.Breaking stereotypes

Practice

• https://github.com/hibernate/hibernate-orm• https://github.com/SpringSource/spring-

framework• https://github.com/gradle/gradle

Page 82: Gradle 2.Breaking stereotypes

Q&A

• Sergey Morenets, [email protected]