What is build? Configuration Procedure How your project looks Project identifier Where are the sources Where are the resources What are our dependencies Copy this to that Compile with 1.5 target Filter web.xml Package war Metadata Script Ant-Like What's your build tool? Control Tasks variety Documentation Good code quality How instead of What Lack of dependency management Lack of abstraction Reinvent the wheel No reuse No standard Procedure in XML Script in Java Ivy Dependency Management Tool Flexible Configuration - not only scope! Conflict managers - per configuration all latest-time latest-revision latest-compatible strict custom Concise Metadata Maven-Like Revolution! "What" instead of "How" Standartization and Structure “Maven is the AWT of build systems” @puredanger Built-in Dependency Managment & Transitive Dependencies Convention over Configuration Poor Implementation Ant Documentation Poorly maintained Never updated No documentation Play bad together Verbose XML Scripting Ant (only more complicated) No separation between metadata and scripting parts Maven2 Mainly used with Ant Ideal Build Tool Revolution! "What" instead of "How" Standartization and Structure “Maven is the AWT of build systems” @puredanger Built-in Dependency Managment & Transitive Dependencies Convention over Configuration Powerful! Control Tasks variety Documentation Good code quality Powerful! Right! Flexible configuration Concise metadata Conflict resolution We want even more! Real scripting language for scripting part of the build Shopping List Writing scripting part in Ruby/JRuby, Groovy, Python/Jython Ivy or improved Maven2 DM Easy usage of Ant tasks Usage of Maven2 tree structure Usage of POM’s DM and ivy.xml This will give us IDE free integration! Documentation Maintenance Reproducible builds Responsible distributive Open Source Standard Project Structure and Convention over Configuration Ant tools Ivy Quality Dependecy Mngmt Ant plugins Project Structure Migration Gant Ant in Groovy Antwrap Ant in Ruby Wrappers Ant tools Ivy Quality Ant tools Ant tools Language Shmant Nicer than Ant Uses Java6 scripting capabilities BeanShell, Groovy, JavaScript (Rhino), JRuby and Jython Parallel task execution Ant tasks & projects executions for migration usage Understands IDEA’s projects and Eclipse workspaces Ant tools Ivy Quality Ant tools Language Raven Java Build with Rake and Gems Based on Rake Uses Ruby Gems Rake syntax Last version 1.2.3 (Dec 2007; last commit Dec 2007) Lacks documentation Gems Ant tools Language Lancet Build written in Clojure It is here just for polyglothism Version ~0.0 No commits for 9 months Unusual Stuff GMaven Build Groovy with Maven, Write Maven plugins in Groovy Lacks documentation GroovyMojo Dependecy Mngmt Ant plugins Project Structure Migration Groovy Kundo Maven2, coded better Configuration in various ways: Groovy, POM.xml, .classpath Scripting part still in plugins! Latest version – 0.9 (Feb 09, no commits for 8 months, 1.0 never came) Almost no documentation Dependecy Mngmt Ant plugins Project Structure Migration Maven3 Well, Maven 2.1 Dependecy Mngmt Ant plugins Project Structure Migration Quality Scripting still in plugins! Buildr Ruby-centric replacement for Maven2 Based on Rake (Ruby) Tasks for Java Maven2: project structure, artifact specs, repos Easy calls to Ant tasks YAML Human friendly data serialization standard for all programming languages Dependecy Mngmt Project Structure Migration Ruby Antwrap Quality Rake task Gradle Groovy-centric replacement for Maven2 with Ivy Latest version – 0.8 (Sep 09) German quality, +200 pages TFM Demo Migrating Maven2 project to Gradle Project Structure Migration Groovy AntBuilder Quality Ivy vs. Dependencies exclusion: tedious & limited Doxia, Plexus & Friends No conflict management Limited Dependency Management Corrupted local repository files Garbaged central repository Everything is a plugin - Bad Idea! (Eclipse in the past) Downloads the Internet on the first run Versions auto-update - Not reproducible build: Things “automagically” seize to work “Everybody’s responsibility” means “Nobody’s responsibility” Java 1.4 Real Scripting Language Dependency Management Ant Tools Project Structure Support of Current Projects & Migration Quality 1.8.1 - 13/10/2009 0.7.0 - 16/02/2008 Last commit - 19/02/2008 1.0.1 - 25/09/09 No delivery date Admits some problems of Maven2: code quality & artifact resolution system Refactoring XML with attributes, Groovy Mixins! Exclusion Plugins in Java 5 (like JFrog’s AnnoMojo) NO Plexus! (XBean) Predictive lifecycle & In/Out params Error reporting New artifact resolution system OSGi & Eclipse Embedder IDE ingeration 1.0 Sep. 2009 1.3.5 05/10/2009 Similar in spirit to Buildr Groovy instead of Ruby JVM, Similar to Java DM based on Ivy Pre-calculated build plan Sophisticated multi-module The Project Common Backend Web JPA & Hibernate Apache Commons Spring Google API Wicket POM.xml Classes Jar POM.xml Classes Jar POM.xml Classes War HTML js css XMLs XMLs POM.xml dbcp log4j Migration Procedure: 1. Declare modules in settings.gradle 2. Declare common properties in parent 3. Run MavenDependencyExtractor.groovy 4. Write the scripting part in Groovy, use Ant tasks 5. Optional - generate pom.xml for IDE integration 6. Run Gradle 7. ? 8. Profit! http://jira.codehaus.org/browse/GRADLE-154
Using Maven2 to build tools was like AWT to UI frameworks: revolutionary, but not without downsides. Concepts such as standardization of project layout and centralized dependency management are preserved in almost every new and future build tool. In this
Evgeny Goldin
pat Baruch Sadogursky
on the back
Evgeny Goldin says: Well, you did your job with this presentation, Baruch - I'll probably use Gradle with my next build system. Thank you! Reply