www.adastra.cz
Gradle
Modern Automation Tool
Vít Kotačka
25. 4. 2013
Gradle? What is it?
• Build automation tool
– building, testing, deployment, reporting etc.
• Domain Specific Language (DSL) based on Groovy
• Combines the power and flexibility of Ant with the
dependency management and conventions of Maven.
• Features are added by plugins.
• Out-of-the-box support: Java, Groovy, Scala, Web, OSGi
• Free and Open Source (Apache Licence)
www.adastra.cz 2
Is it really good?
www.adastra.cz 3
Project & Task
• Project represents a component which can be built.
• Project defines a related set of tasks.
ProjectDir/build.gradle
• Task is an atomic unit of work which a build performs.
task helloWorld << {
println 'Hello, world!'
}
www.adastra.cz 4
Java Project
apply plugin: 'java'
• Maven default layout
– src/main/java
– src/main/resource
– src/test/java
– src/test/resources
• Additional tasks
– clean
– build
– jar
– test
– javadoc
www.adastra.cz 5
Unit Tests
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
• JUnit default
• TestNG explicit
test.useTestNG()
JUnitwww.adastra.cz 6
Web Project
apply plugin: 'war'
war {
baseName = 'deepThought'
}
dependencies {
providedCompile 'javax.servlet:servlet-api:3.0'
}
• Project layout
– src/main/webapp
• Additional task
– war
JUnitwww.adastra.cz 7
Jetty
configurations {
jetty8
}
dependencies {
jetty8 'org.mortbay.jetty:jetty-runner:8.1.10.v20130312'
}
task runJetty8(type: JavaExec) {
main = 'org.mortbay.jetty.runner.Runner'
args = [war.archivePath]
classpath configurations.jetty8
}
• Plugin 'jetty'
supports Jetty 6
only.
JUnitwww.adastra.cz 8
Code Quality
apply {
plugin 'checkstyle'
plugin 'pmd'
plugin 'findbugs'
plugin 'jdepend‚
plugin 'sonar'
}
www.adastra.cz 9
Multi Project
build.gradle
allprojects {
task work << {
...
}
}
subprojects { ... }
project(':nonJava') { ... }
settings.gradle
include 'nonJava',
'java',
'web'
www.adastra.cz 10
Ant
build.xml
<project name="DeepThought">
<property name="ultimateAnswer" value="12"/>
<target name="answer">
<echo>${ultimateAnswer}</echo>
</target>
</project>
build.gradle
ant.importBuild 'ant/build.xml'
ant.properties['ultimateAnswer'] = '42'
www.adastra.cz 11
Gradle GUI
gradle --gui
www.adastra.cz 12
IDE Support
www.adastra.cz 13
About Me
http://sw-samuraj.cz
@sw_samuraj
http://linkedin.com/in/vitkotacka
www.adastra.cz 14
www.adastra.cz 15

Gradle