The Internet belongs to everyone. Let’s keep it that way.

Protect Net Neutrality
Loading presentation...

Present Remotely

Send the link below via email or IM


Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.


Copy of Java Build Automation Tools Jungle

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.

Suhas Kelkar

on 11 December 2011

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Copy of Java Build Automation Tools Jungle

What is build? Control How instead of What Lack of abstraction Procedure in XML Script in Java Ivy Dependency Management Tool Flexible Configuration - not only scope! Conflict managers - per configuration all
custom Concise Metadata Ant Poorly maintained
Never updated
No documentation
Play bad together Mainly used with Ant Ideal Build Tool Declarative "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
Good code quality Imperative Right! Flexible configuration
Concise metadata
Conflict resolution We want even more! Real scripting language
for imperative part of the build Shopping
List Usage of Maven2 tree structure
Reuse existing Ant targets
Usage of POM’s DM and ivy.xml
This will give us IDE free integration! Standard Project
Structure and Convention
over Configuration Just do whatever needed
Writing scripting part in
Ruby/JRuby, Groovy, Python/Jython 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 Lacks documentation Kundo Maven2, coded better Configuration in various ways:
Groovy, POM.xml, .classpath Maven3 Build Groovy with Maven,
Write Maven plugins in Groovy “Maven is the AWT of build systems”
@puredanger GroovyMojo Latest version: 0.9 (1 year,
10 months ago)
No commits for 11 months,
1.0 never came
Almost no documentation Standartization and Structure Imperative part in Groovy plugins "What" instead of "How" GMaven Declarative Build Built-in Dependency Managment &
Transitive Dependencies Maven2 Well, Maven 2.1 Same rigidness Buildr Ruby-centric
replacement for Maven2 Based on Rake (Ruby)
Tasks for Java
Maven2: project structure, artifact specs, repos
Easy calls to Ant tasks Rake task Gradle Groovy-centric replacement
for Maven2 with Ivy Latest version – 0.9-rc3 (2 weeks ago)
Actively developed
German quality, ~300 pages TFM vs. Everything is a plugin Maven... downloading the
whole internet since 2004 Versions auto-update
Not reproducible build:
Things “automagically” cease to work “Everybody’s responsibility”
means “Nobody’s responsibility” Imperative..less Released 2
months ago Admits some problems of Maven2:
code quality & artifact resolution system Refactoring Mixins! Plugins in Java 5 NO Plexus! (Guice) Predictive lifecycle & In/Out params Error reporting New artifact resolution system OSGi & Eclipse Embedder IDE ingeration 1.0 (1year,
3 months ago) Apache project
1.4.4 (2 weeks ago)
150+ pages TFM DSL on Groovy: JVM
Similar to Java DM based on Ivy Pre-calculated build plan Sophisticated multi-module Imperative Declarative Simple Build Tool Leiningen Polyglot Maven Schmant Nicer than Ant Uses Java6 scripting capabilities Groovy
JavaScript (Rhino)
Jython Parallel task execution
Ant tasks & projects executions
Understands IDEA’s projects
and Eclipse workspaces Latest Version: 1.1 9 months ago
Where's the source code? Lancet Ant in Clojure No released version
No commits for 1 year, 8 months Gant Ant in Groovy Ant Wrappers Latest Version: 1.9.3 less than half year ago,
actively developed Make Clones What's your build tool? Documentation
Reproducible builds
Responsible distributive
Open Source Easy usage of Ant tasks Imperative only Metadata Script Declarative Imperative PJMake Pure Java Make One version: 2 years, 2 months ago
No commits for 1 year, 9 months JMK Make in Java Latest version 1.6: 8 years, 9 months ago
Abandoned JaMake Pure Java Build tool One version 1 year, 5 months ago
No commits for 1 year, 4 months BuildObjects Object Based build tool Latest version more than year ago
No commits for more than half year Lots of small,
unknown projects Antwrap Ant in Ruby Last version 0.7.0: 2 years, 9 months ago
No commits since then This one is good! Java 1.4 Verbose XML No Continuous Integration... No Agile! No automatic builds... Documentation Dependencies exclusion:
tedious & limited Doxia, Plexus & Friends No conflict management Corrupted local repository files Garbaged central repository Bad multimodule support Just aggregation of standalone projects Unpredictable Pesky little things... No means to produce build plan Mandatory depedency transitivity Repository layout Conflicts resolution Hardcoded dependency
scopes One artifact per project Backwards compatible Same XML Hell Current version: 0.8 (4 months ago)
Active development POM in
Groovy, Scala, Clojure Some imperativeness directly in pom Same rigidness Lacks documentation Lacks documentation Maven DI Declarative build in Clojure Metadata: Clojure macro Maven DI Latest version: 1.3.1 (3 months ago)
Actively developed Imperative part in Clojure plugins Error Reporting Build in Scala Ivy for dependency injection Build is Scala class:
Declarative parts inherited from parent
Imperative parts are additions to the class For Scala and Java with limitations Latest version: 0.7.5.RC0
(2 weeks ago)
Decent wiki & Google groups Lacks documentation Declarative builds and build-by-convention Incremental build Ant integration Maven integration © Scott Adams Convention over Configuration Tasks variety Documentation Good code quality Lack of dependency
management Reinvent the wheel No reuse No standard Design Decisions @dhaat Rigidness Things I
sick of... Things I
can't get
away from... Ant & M2 Lots of info Hot topic "Said what?" Smart croud Info
starvation Drop in
the middle Quality
Q&A Thank you! Simple Build Tool Raven Leiningen .......|.......|.......|.......|.......|.......|.......|.......|.......|.......|.......|.......|.......|.......|....... GMaven Ant Gradle Make Clones Polyglot Maven Buildr Maven2 Kundo Maven3 Ant Wrappers Schmant Ivy level - advantage Truly OO! Latest version 1.1.0: 3 years, 5 months ago
Abandoned 7Bee Make in XML Ant "Enhancers" AntHill Remote Target Invocation over XMPP RAnt Distributed Ant invocation AntMod Repository & Release
management Last verion: 2.0alpha1 last month
Actively developed Ant in Groovy with Maven-style plugns Savant This one looks interesting! Declarative Imperative Java Build Automation Tools Jungle Baruch Sadogursky
@jbaruch Simple Build Tool Maven2 Gradle GMaven Maven3 Leiningen Kundo Schmant Make Clones -----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|----- Done! Half way there! Ant Wrappers Raven Buildr Polyglot Maven Ant Copy this to that
Compile with 1.5 target
Filter web.xml
Package war Procedure Project identifier
Where are the sources
Where are the resources
What are our dependencies How your project looks Configuration
Full transcript