Top Banner
ANDRES ALMIRAY IX-CHEL RUIZ @AALMIRAY @IXCHELRUIZ HARDER, BETTER, STRONGER, FASTER
32

Javaone - Gradle: Harder, Better, Stronger, Faster

Dec 02, 2014

Download

Software

Andres Almiray

Javaone - Gradle: Harder, Better, Stronger, Faster
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: Javaone - Gradle: Harder, Better, Stronger, Faster

ANDRES ALMIRAY IX-CHEL RUIZ @AALMIRAY @IXCHELRUIZ

HARDER, BETTER,

STRONGER, FASTER

Page 2: Javaone - Gradle: Harder, Better, Stronger, Faster
Page 3: Javaone - Gradle: Harder, Better, Stronger, Faster
Page 4: Javaone - Gradle: Harder, Better, Stronger, Faster

WHAT

Page 5: Javaone - Gradle: Harder, Better, Stronger, Faster

Gradle is a build tool designed to take advantage of conventions over (not instead) configuration, while staying flexible enough to be customized to the needs of a particular project. In other words, the build tool bends to the project’s will, not the other way around.

Page 6: Javaone - Gradle: Harder, Better, Stronger, Faster

Follows the Maven conventions. Expressive : Prefers a DSL for describing what needs to be done. Extensible : Has a growing an thriving plugin ecosystem. Productive : Fosters fast and reproducible builds. Convenient : It’s CI friendly (gradle wrapper).

Page 7: Javaone - Gradle: Harder, Better, Stronger, Faster

WHY

Page 8: Javaone - Gradle: Harder, Better, Stronger, Faster

RebelLabs © ZeroTurnaround

Page 9: Javaone - Gradle: Harder, Better, Stronger, Faster

RebelLabs © ZeroTurnaround

Page 10: Javaone - Gradle: Harder, Better, Stronger, Faster
Page 11: Javaone - Gradle: Harder, Better, Stronger, Faster

Caching of task input and outputs Richer, configurable lifecycle The Gradle deamon The Gradle wrapper Multi-project builds are hassle free Plugin development is more intuitive Better documentation overall

Page 12: Javaone - Gradle: Harder, Better, Stronger, Faster

HOW

Page 13: Javaone - Gradle: Harder, Better, Stronger, Faster

$ curl -s get.gvmtool.net | bash $ gvm install gradle

Page 14: Javaone - Gradle: Harder, Better, Stronger, Faster

.!

├── build.gradle!

├── pom.xml!

└── src!

├── main!

│   └── java!

│   └── sample!

│   └── Foo.java!

└── test!

└── java!

└── sample!

└── FooTest.java!

Page 15: Javaone - Gradle: Harder, Better, Stronger, Faster

<project xmlns="http://maven.apache.org/POM/4.0.0"!

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"!

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">!

<modelVersion>4.0.0</modelVersion>!

<groupId>com.acme</groupId>!

<artifactId>sample</artifactId>!

<packaging>jar</packaging>!

<version>0.0.0-SNAPSHOT</version>!

!

<dependencies>!

<dependency>!

<groupId>junit</groupId>!

<artifactId>junit</artifactId>!

<version>4.11</version>!

<scope>test</scope>!

</dependency>!

</dependencies>!

</project>!

😐

Page 16: Javaone - Gradle: Harder, Better, Stronger, Faster

apply plugin: 'java'!

apply plugin: 'maven-publish'!

!

version = '0.0.0-SNAPSHOT'!

group = 'com.acme'!

!

repositories {!

jcenter()!

}!

!

dependencies {!

testCompile 'junit:junit:4.11'!

}!

😎

Page 17: Javaone - Gradle: Harder, Better, Stronger, Faster

SCENARIOS

Page 18: Javaone - Gradle: Harder, Better, Stronger, Faster

ü  Executable/Launchable application

ü  Executable fat jar

ü  Installable application

Page 19: Javaone - Gradle: Harder, Better, Stronger, Faster

EXECUTABLELAUNCHABLE APPLICATION

Page 20: Javaone - Gradle: Harder, Better, Stronger, Faster

<project ...>!

<build>!

<plugins>!

<plugin>!

<groupId>org.codehaus.mojo</groupId>!

<artifactId>exec-maven-plugin</artifactId>!

<version>1.2.1</version>!

<configuration>!

<mainClass>sample.Foo</mainClass>!

</configuration>!

</plugin>!

</plugins>!

</build>!

</project>!

$ mvn compile exec:java

😐

Page 21: Javaone - Gradle: Harder, Better, Stronger, Faster

apply plugin: 'java'!

apply plugin: 'application'!

!

mainClassName = 'sample.Foo'!

$ gradle run

😎

Page 22: Javaone - Gradle: Harder, Better, Stronger, Faster

EXECUTABLE FAT JAR

Page 23: Javaone - Gradle: Harder, Better, Stronger, Faster

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-shade-plugin</artifactId>

<version>2.3</version>

<configuration>

<transformers>

<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">

<manifestEntries>

<Main-Class>sample.Foo</Main-Class>

</manifestEntries>

</transformer>

</transformers>

</configuration>

</plugin>

<plugins>

$ mvn package –DskipTests=true

😐

Page 24: Javaone - Gradle: Harder, Better, Stronger, Faster

plugins {!

id 'com.github.johnrengelman.shadow' version '1.1.2'!

}!

!

apply plugin: 'java'!

apply plugin: 'application'!

!

mainClassName = 'sample.Foo'!

!

repositories { jcenter() }!

!

dependencies { compile 'commons-lang:commons-lang:2.6' }!

$ gradle shadowJar

😎

Page 25: Javaone - Gradle: Harder, Better, Stronger, Faster

Installable application .!

├── bin!

│   ├── sample!

│   └── sample.bat!

└── lib!

├── commons-lang-2.6.jar!

└── sample-0.0.0-SNAPSHOT.jar!

Page 26: Javaone - Gradle: Harder, Better, Stronger, Faster

1.   Add assembly plugin!

2.   Create assembly descriptor!

1.  Dist option for building the directory structure!2.  Zip option for packing all in a single file!

3.   Create launch scripts (for all target platforms!)!

4.   Might require custom profiles!

OR configure the appassembler plugin!

😐

Page 27: Javaone - Gradle: Harder, Better, Stronger, Faster

apply plugin: 'java'!

apply plugin: 'application’!

mainClassName = 'sample.Foo'!

!

repositories {!

jcenter()!

}!

!

dependencies {!

compile 'commons-lang:commons-lang:2.6'!

}!

$ gradle distZip

😎

Page 28: Javaone - Gradle: Harder, Better, Stronger, Faster

BUT WAIT, THERE’S

MORE

Page 29: Javaone - Gradle: Harder, Better, Stronger, Faster

$ gvm install lazybones $ lazybones create gradle-quickstart sample

Page 30: Javaone - Gradle: Harder, Better, Stronger, Faster
Page 31: Javaone - Gradle: Harder, Better, Stronger, Faster

license versions stats bintray shadow izpack java2html git coveralls

asciidoctor jbake markdown livereload gretty Nexus watch wuff spawn

Page 32: Javaone - Gradle: Harder, Better, Stronger, Faster

THANK YOU!

HTTP://PEOPLE.CANOO.COM/SHARE

Andres Almiray Ix-chel Ruiz

@aalmiray @ixchelruiz