08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Gradle
1. gradle
Thor Åge Eldby
Monday, November 21, 2011 1
2. Thor Åge Eldby
@thoraageeldby
Arktekk
2
Monday, November 21, 2011 2
2.5 år in Arktekk
16 år in system development
3. Build Systems
make
sbt
3
Monday, November 21, 2011 3
Make, batch-files (COS,Steinar Haugen,Kenneth Stigen)
ant -> can compile java
maven -> conventions, dependencies
sbt and now gradle
4. What: Repeatable
ear ear ear ear
4
Monday, November 21, 2011 4
Independent from host, platform, time
All information in build scripts
•How
•What
•Externals
-Ant
5. What: Flexible
5
Monday, November 21, 2011 5
Possible to build
Simple
-Maven, Ant
6. What: Readable
6
Monday, November 21, 2011 6
Not a black box
Diffable
GUI is not
11. Dependencies
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.guava:guava:r08'
}
11
Monday, November 21, 2011 11
Configuration like scope in maven
... and classpath in ant
12. Dependencies
apply plugin: 'java'
repositories {
dependencies {
mavenCentral()
compile project(':common')
}
}
dependencies {
compile 'com.google.guava:guava:r08'
}
11
Monday, November 21, 2011 11
Configuration like scope in maven
... and classpath in ant
13. Dependencies
apply plugin: 'java'
repositories {
dependencies {
dependencies {
mavenCentral()
testCompile group: 'junit', name: 'junit',
compile project(':common')
}
version: '4.+'
}
} dependencies {
compile 'com.google.guava:guava:r08'
}
11
Monday, November 21, 2011 11
Configuration like scope in maven
... and classpath in ant
14. Dependencies
apply plugin: 'java'
dependencies {
repositories {
dependencies {
dependencies {
compile('org.hibernate:hibernate:3.0.5') {
mavenCentral()
testCompile group: 'junit', name: 'junit',
compile project(':common')
transitive = false
}
version: '4.+'
} }
} dependencies {
}
compile 'com.google.guava:guava:r08'
}
11
Monday, November 21, 2011 11
Configuration like scope in maven
... and classpath in ant
22. Coding It
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.guava:guava:r08'
}
13
Monday, November 21, 2011 13
Tasks (like ant targets)
•Depends on
Repositories
•Uses maven
Configurations (like maven scopes)
Building simple example without plugins
Compile java and jar it
Keeping out testing and all the other stuff
Prefer functions over tasks
23. Coding It
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.guava:guava:r08'
}
13
Monday, November 21, 2011 13
Tasks (like ant targets)
•Depends on
Repositories
•Uses maven
Configurations (like maven scopes)
Building simple example without plugins
Compile java and jar it
Keeping out testing and all the other stuff
Prefer functions over tasks
24. Multi Project
myproject
api
common
web
14
Monday, November 21, 2011 14
25. Multi Project
settings.gradle
include 'common', 'api', 'web'
15
Monday, November 21, 2011 15
Settings object - Including multiprojects
26. Multi Project
settings.gradle
include 'common', 'api', 'web'
def subs(project) {
def children = project.children
children + children.collect { subs(it) }
}
subs(rootProject).flatten().each {
it.buildFileName = "${it.name}.gradle"
}
15
Monday, November 21, 2011 15
Settings object - Including multiprojects
30. Multi Project
common/common.gradle
17
Monday, November 21, 2011 17
Empty -> Remove
31. Multi Project
common/common.gradle
17
Monday, November 21, 2011 17
Empty -> Remove
32. Multi Project
api/api.gradle
dependencies {
compile project(‘:common’)
}
18
Monday, November 21, 2011 18
33. Multi Project
web/web.gradle
apply plugin: ‘war’
dependencies {
compile project(‘:api’)
}
war {
webAppDir file(‘src/main/webapp’)
}
19
Monday, November 21, 2011 19
34. Multi Project
myproject
api
common
web
20
Monday, November 21, 2011 20
Built alphabetically
Unless dependencies
Cross module dependencies
•Single cmd to draw out result
35. Multi Project
myproject
api
common
web
20
Monday, November 21, 2011 20
Built alphabetically
Unless dependencies
Cross module dependencies
•Single cmd to draw out result
36. Multi Project
myproject
common
api
web
20
Monday, November 21, 2011 20
Built alphabetically
Unless dependencies
Cross module dependencies
•Single cmd to draw out result
37. Plugin Support
21
Monday, November 21, 2011 21
Maven plugin (uploads artifacts)
Eclipse/Idea plugin
•Never get the maven integration, nothing can be said before all config is loaded
Java / Groovy / Scala
War / Ear / Antlr / Announce / Application / Jetty
Sonar / Project Report / Code Quality
More on github
38. Writing Own Plugins
22
Monday, November 21, 2011 22
1.Hack it together
2.Copy it
3.Create a plugin
39. IDE Support
23
Monday, November 21, 2011 23
Plugins for Idea and Eclipse
Idea functions very well
Not for gradle code: Gradle support in Idea 11
Netbeans being worked on (by Oracle)
40. IDE Support
23
Monday, November 21, 2011 23
Plugins for Idea and Eclipse
Idea functions very well
Not for gradle code: Gradle support in Idea 11
Netbeans being worked on (by Oracle)
41. IDE Support
23
Monday, November 21, 2011 23
Plugins for Idea and Eclipse
Idea functions very well
Not for gradle code: Gradle support in Idea 11
Netbeans being worked on (by Oracle)
42. IDE Support
?
23
Monday, November 21, 2011 23
Plugins for Idea and Eclipse
Idea functions very well
Not for gradle code: Gradle support in Idea 11
Netbeans being worked on (by Oracle)
43. Performance
24
Monday, November 21, 2011 24
Generally OK
Loads all configuration
•Daemon may fix this
Calculates MD5 sums for inputs/outputs
44. Coming Attractions
NEW
25
Monday, November 21, 2011 25
Release 0.1 @ April 2008
A little immature, version 1.0m3 (1.0m4 withdrawn)
1.0 milestone 5
•Daemon (4)
•EAR, Signing (4)
•Experimental C++
•Multi process safe caches
45. Conclusion
26
Monday, November 21, 2011 26
Strangeness:
•Hard to test plugins
•Low on documentation (search mailing-list)
•Changes can be made to early or to late for the process
•Silent when it’s unable to find a project artifact (due to missing dependencies)
Perfect for reviving ant-projects
Flexible flexible flexible