Your SlideShare is downloading. ×
0
Gradle next generation of build tools E-mail: khotin@gmx.com Игорь Хотинь Gradle next generation of build tools
Background <ul><li>11+ лет в IT-индустрии
6+ лет с Java
Сторонник гибкого дизайна </li></ul><ul><li>Agile-практик </li></ul>
Что мы используем? <ul><li>Ant?
Maven?
buildr?
Gradle?
... </li></ul>
Что нас беспокоит? <ul><li>Тяжёлые билды
Долгие циклы интеграции
Поддержка билд-проектов
... </li></ul>
Как это было раньше?
Выбить перфокарты...
Принести оператору
Подождать результат
Забрать распечатки
Отладка?
1977 – make
2000
Сложность повторное использование ant тяжёлые build.xml контроль циклов сборки
2001
m a ven тяжёлые pom.xml convention over configuration dependency management Сложно переопределить поведение по-умолчанию l...
Gradle вчера <ul><li>Hans Dockter – основатель
Еволюция идей Gant
Начало 2008 – первые версии
Серия стабильных pre-1.0 релизов
2010 Springy Innovation Award </li></ul>
Gradle сегодня <ul><li>Релиз 1.0 milestone-3 stable
Активное сообщество
Gradleware
Apache License, Version 2.0 </li></ul>
Gradle in the wild Carrier Hibernate Grails Groovy Spring-Security Spring-Integration EADS Griffon Gaelyk Qi4j Canoo FCC Z...
Gradle завтра <ul><li>Сентябрь 2011 - 1.0 RC-1
Ожидаем релиз 1.0 к концу 2012 </li><ul><li>Более тесная интеграция с maven
Build aggregation
Gradle daemon
Gradle 1.0 Plugin System
Archetypes? </li></ul></ul>
Who is that Gradle? <ul><li>Build integration tool
Declarative builds
Upcoming SlideShare
Loading in...5
×

Gradle - next generation of build tools

1,455

Published on

(Russian) Overview of gradle build integration tool - current status, features and how it compares to current Java mainstream build tools - Ant and Maven.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,455
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Gradle - next generation of build tools"

  1. 1. Gradle next generation of build tools E-mail: khotin@gmx.com Игорь Хотинь Gradle next generation of build tools
  2. 2. Background <ul><li>11+ лет в IT-индустрии
  3. 3. 6+ лет с Java
  4. 4. Сторонник гибкого дизайна </li></ul><ul><li>Agile-практик </li></ul>
  5. 5. Что мы используем? <ul><li>Ant?
  6. 6. Maven?
  7. 7. buildr?
  8. 8. Gradle?
  9. 9. ... </li></ul>
  10. 10. Что нас беспокоит? <ul><li>Тяжёлые билды
  11. 11. Долгие циклы интеграции
  12. 12. Поддержка билд-проектов
  13. 13. ... </li></ul>
  14. 14. Как это было раньше?
  15. 15. Выбить перфокарты...
  16. 16. Принести оператору
  17. 17. Подождать результат
  18. 18. Забрать распечатки
  19. 19. Отладка?
  20. 20. 1977 – make
  21. 21. 2000
  22. 22. Сложность повторное использование ant тяжёлые build.xml контроль циклов сборки
  23. 23. 2001
  24. 24. m a ven тяжёлые pom.xml convention over configuration dependency management Сложно переопределить поведение по-умолчанию lost of control
  25. 25. Gradle вчера <ul><li>Hans Dockter – основатель
  26. 26. Еволюция идей Gant
  27. 27. Начало 2008 – первые версии
  28. 28. Серия стабильных pre-1.0 релизов
  29. 29. 2010 Springy Innovation Award </li></ul>
  30. 30. Gradle сегодня <ul><li>Релиз 1.0 milestone-3 stable
  31. 31. Активное сообщество
  32. 32. Gradleware
  33. 33. Apache License, Version 2.0 </li></ul>
  34. 34. Gradle in the wild Carrier Hibernate Grails Groovy Spring-Security Spring-Integration EADS Griffon Gaelyk Qi4j Canoo FCC Zeppelin GmhH Spock Aluminum Gant GPars
  35. 35. Gradle завтра <ul><li>Сентябрь 2011 - 1.0 RC-1
  36. 36. Ожидаем релиз 1.0 к концу 2012 </li><ul><li>Более тесная интеграция с maven
  37. 37. Build aggregation
  38. 38. Gradle daemon
  39. 39. Gradle 1.0 Plugin System
  40. 40. Archetypes? </li></ul></ul>
  41. 41. Who is that Gradle? <ul><li>Build integration tool
  42. 42. Declarative builds
  43. 43. Groovy-based build DSL
  44. 44. Build-by-convention </li></ul>
  45. 45. Who is that Gradle? <ul><li>Scalable – multi-project builds
  46. 46. Dependency management
  47. 47. Ease of migration
  48. 48. Embeddable
  49. 49. Deep API </li></ul>
  50. 50. Gradle positioning
  51. 51. Hello Gradle build.gradle task hello << { println 'Hello world!' } > gradle -q hello Hello Gradle!
  52. 52. gradle task != ant task gradle task == ant target
  53. 53. Groovy в Gradle build.gradle task count << { 4.times { print &quot;$it &quot; } } > gradle -q count 0 1 2 3
  54. 54. Dependencies build.gradle task hello << { println 'Hello world!' } task count(dependsOn: hello) << { 4.times { print &quot;$it &quot; } } > gradle -q count Hello world! 0 1 2 3
  55. 55. Lazy dependencies build.gradle task hello(dependsOn: 'lazy') << { println 'Hello world!' } task lazy << { println 'so lazy...' } > gradle -q hello so lazy... Hello world!
  56. 56. Java Plugin build.gradle apply plugin: 'java' > gradle build ...
  57. 57. Java build-cycle customization build.gradle apply plugin: 'java' test.doFirst { println 'Before testing...' } test.doLast { println '...after testing.' }
  58. 58. Repos build.gradle apply plugin: 'java' repositories { mavenCentral() } dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' }
  59. 59. Ant build.gradle ant.importBuild 'build.xml' task ant << { ant.echo(message: 'hello from Ant') ant.zip(destfile: 'archive.zip') { fileset(dir: 'src') { include(name: '**.xml') exclude(name: '**.java') } } }
  60. 60. Apache Ant vs. Apache Maven vs. Gradle
  61. 61. ant <?xml version=&quot;1.0&quot;?> <project name=&quot;simple&quot; default=&quot;dist&quot; basedir=&quot;.&quot;> <property name=&quot;src&quot; location=&quot;src/main/java&quot;/> <property name=&quot;srcTest&quot; location=&quot;src/test/java&quot;/> <property name=&quot;build&quot; location=&quot;build&quot;/> <property name=&quot;dist&quot; location=&quot;${build}/lib&quot;/> <property name=&quot;version&quot; value=&quot;1.0-SNAPSHOT&quot; /> <path id=&quot;classpath.compile&quot;> <pathelement location=&quot;libs/commons-lang-2.5.jar&quot;/> </path> <path id=&quot;classpath.test&quot;> <pathelement location=&quot;libs/junit-4.8.2.jar&quot;/> <pathelement location=&quot;libs/commons-lang-2.5.jar&quot;/> <pathelement location=&quot;${srcTest}&quot;/> <pathelement location=&quot;${build}/classes&quot;/> <pathelement location=&quot;${build}/test-classes&quot;/> </path> ...
  62. 62. ... <target name=&quot;init&quot;> <mkdir dir=&quot;${build}/classes&quot;/> <mkdir dir=&quot;${build}/test-classes&quot;/> </target> <target name=&quot;compile&quot; depends=&quot;init&quot;> <javac srcdir=&quot;${src}&quot; destdir=&quot;${build}/classes&quot;> <classpath refid=&quot;classpath.compile&quot;/> </javac> </target> <target name=&quot;testCompile&quot; depends=&quot;compile&quot;> <javac srcdir=&quot;${srcTest}&quot; destdir=&quot;${build}/test-classes&quot;> <classpath refid=&quot;classpath.test&quot;/> </javac> </target> ... ant
  63. 63. ... <target name=&quot;test&quot; depends=&quot;testCompile&quot;> <junit fork=&quot;yes&quot; haltonfailure=&quot;yes&quot;> <batchtest fork=&quot;yes&quot;> <fileset dir=&quot;${srcTest}&quot;> <include name=&quot;**/*Test.java&quot;/> </fileset> </batchtest> <classpath refid=&quot;classpath.test&quot;/> <formatter type=&quot;plain&quot;/> </junit> </target> <target name=&quot;dist&quot; depends=&quot;test&quot;> <mkdir dir=&quot;${dist}&quot;/> <jar jarfile=&quot;${dist}/coc-comparison-${version}.jar&quot; basedir=&quot;${build}/classes&quot;/> </target> <target name=&quot;clean&quot;><delete dir=&quot;${build}&quot;/></target> </project> ant
  64. 64. m a ven <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;> <modelVersion>4.0.0</modelVersion> <groupId>grId</groupId> <artifactId>coc-comparison</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> ...
  65. 65. m a ven ... <dependencies> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
  66. 66. gradle apply plugin: 'java' version=&quot;1.0-SNAPSHOT&quot; group=&quot;grId&quot; archivesBaseName=&quot;coc-comparison&quot; repositories { mavenCentral() } dependencies { compile 'commons-lang:commons-lang:2.5' testCompile 'junit:junit:4.8.1' }
  67. 68. Ресурсы <ul><li>www.gradle.org
  68. 69. groovy.codehaus.org
  69. 70. ant.apache.org/ivy </li></ul>
  70. 71. Контакты E-mail: [email_address] Blog: www.ikhotin.com Twitter: chaostarter linkedin .com/pub/igor-khotin/5/193/257
  71. 72. Вопросы?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×