migrating 25k lines of ant scripting to gradle

Post on 11-Apr-2017

152 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Who is this guy?

We will consult these 3 experts

Linus Torvalds

creator of Linux & Git

We will consult these 3 experts

Linus Torvalds Mark Reinhold

creator of Linux & Git Java's chief architect

We will consult these 3 experts

Linus Torvalds Mark Reinhold Louis van Gaal

creator of Linux & Git Java's chief architect manager ofManchester United

We will consult these 3 experts

Linus Torvalds Mark Reinhold Louis van Gaal

creator of Linux & Git Java's chief architect former manager ofManchester United

Changes inrequirements

Changes in requirementsPast

compiling

packaging

Changes in requirementsPresent

one project, multiple programming languages

compiling

running automated tests

packaging

integrating code as early as possible

deploying software to TAP

Defining builds inXML

XMLLet's start by being nice:

excels at expressing hierarchical data

XMLLet's start by being nice:

excels at expressing hierarchical data

but...build scripting logic doesn't easily fit a hierarchy

often it consists of conditional and repeating logic

which can be expressed more concisely in a programming

language

What does Linus think of XML?

What does Linus think of XML?

( )

XML is crap. Really. There are no excuses.

XML is nasty to parse for humans, and it's a

disaster to parse even for computers. There's

just no reason for that horrible crap to exist.

https://plus.google.com/+LinusTorvalds/posts/X2XVf9Q7MfV

Build tools:head to head

Ant vs. Maven according to Mark

Ant vs. Maven according to Mark

( )

What's the difference between Ant and

Maven?

https://www.parleys.com/tutorial/devoxx-fireside-chat

Ant vs. Maven according to Mark

( )

What's the difference between Ant and

Maven? The creator of Ant has apologized.

https://www.parleys.com/tutorial/devoxx-fireside-chat

Build tools head-to-headAnt Maven Gradle

Build tools head-to-headAnt Maven Gradle

build script format XML XML Groovy / DSL

Build tools head-to-headAnt Maven Gradle

build script format XML XML Groovy / DSL

dependencies with Ivy built-in built-in

Build tools head-to-headAnt Maven Gradle

build script format XML XML Groovy / DSL

dependencies with Ivy built-in built-in

multi-module builds complex simple simple

Build tools head-to-headAnt Maven Gradle

build script format XML XML Groovy / DSL

dependencies with Ivy built-in built-in

multi-module builds complex simple simple

pre-defined structure absent present present

Build tools head-to-headAnt Maven Gradle

build script format XML XML Groovy / DSL

dependencies with Ivy built-in built-in

multi-module builds complex simple simple

pre-defined structure absent present present

custom structure n/a complex simple

Build tools head-to-headAnt Maven Gradle

build script format XML XML Groovy / DSL

dependencies with Ivy built-in built-in

multi-module builds complex simple simple

pre-defined structure absent present present

custom structure n/a complex simple

verbosity high average low

Build tools head-to-headAnt Maven Gradle

build script format XML XML Groovy / DSL

dependencies with Ivy built-in built-in

multi-module builds complex simple simple

pre-defined structure absent present present

custom structure n/a complex simple

verbosity high average low

learning curve shallow steep average

Build tools head-to-headAnt Maven Gradle

build script format XML XML Groovy / DSL

dependencies with Ivy built-in built-in

multi-module builds complex simple simple

pre-defined structure absent present present

custom structure n/a complex simple

verbosity high average low

learning curve shallow steep average

build order depends-on lifecycles directed acyclic graph

Gradle at NS(Dutch Railways)

Gradle at NS (Dutch Railways)not at all a 'greenfield project'!

1 million lines of code

over 25,000 lines of Ant scripting

30 software developers

system behaves like a monolith

Migration strategy

Migration strategydivide the project into components according to

functionality

start Gradling at a small, isolated part

focus on code that is used regularly (i.e. on a daily basis)

Migration strategydivide the project into components according to

functionality

start Gradling at a small, isolated part

focus on code that is used regularly (i.e. on a daily basis)

verify after each step that:

results are exactly the same as before

no problems occur in existing Ant code

Migration strategydivide the project into components according to

functionality

start Gradling at a small, isolated part

focus on code that is used regularly (i.e. on a daily basis)

verify after each step that:

results are exactly the same as before

no problems occur in existing Ant code

don't fool yourself: not every single line of Ant code should

be replaced

Ant projects are 'first class citizens'

Challengesdependency spaghetti

collaboration with existing Ant code

continuous integration & delivery

Migration resulta component's responsibility has become clearer

a build will only run if the particular component has

changed

run unit test in parallel (Gradle decides when)

dependencies behave transitively

Migration result (lines of code)Language Lines of code (before) Lines of code (after)

Ant over 25,000 about 15,000

Gradle 0 1,232

What does Louis think of migrating all Antcode?

What does Louis think of migrating all Antcode?

( )

In the Netherlands they say: "That is another

cook."

https://youtu.be/x-QRqOndbzw

Wrap-up

Wrap-up

Wrap-upAnt & Maven:

require hard-to-maintain code

the purpose of a code fragment is not clearly evident

Wrap-upAnt & Maven:

require hard-to-maintain code

the purpose of a code fragment is not clearly evident

often fail to address changing requirements

rely heavily on XML

Wrap-upAnt & Maven:

require hard-to-maintain code

the purpose of a code fragment is not clearly evident

often fail to address changing requirements

rely heavily on XML

Gradle is a better alternative

Wrap-up (2)Gradle offers structure and flexibility

tries to combine the power of Ant and Maven

integrates with (almost) anything

Wrap-up (3)So no drawbacks whatsoever?

Wrap-up (3)So no drawbacks whatsoever?

Gradle spends a lot of time on configuration parsing (but

this has steadily improved in the past year)

developers need to get used to it

migrating existing scripting is a lot of work

Should my project use Gradle?A brand-new project?

Should my project use Gradle?A brand-new project?

just do it

Should my project use Gradle?A brand-new project?

just do it

do it RIGHT NOW

Should my project use Gradle?An existing project?

Should my project use Gradle?An existing project?

Will you benefit from Gradles key features? (better

performance, maintainability, less verbose, ...)

Should my project use Gradle?An existing project?

Will you benefit from Gradles key features? (better

performance, maintainability, less verbose, ...)

Any technical debt to solve?

Should my project use Gradle?An existing project?

Will you benefit from Gradles key features? (better

performance, maintainability, less verbose, ...)

Any technical debt to solve?

use an artifact repository and remove duplicates

divide your project into multiple components

define a clear structure in your build logic

Any questions?

Further reading"Why Build Your Java Projects with Gradle Rather than Ant

or Maven?"

by Benjamin Muschko( )

Gradle User Guide( )

Gradle Build Language Reference( )

http://www.drdobbs.com/jvm/why-build-your-java-projects-with-gradle/240168608

http://gradle.org/docs/current/userguide/userguide.html

http://gradle.org/docs/current/dsl/index.html

Thank you :)

You can contact me at:

@hannotify

hanno.embregts@infosupport.com

top related