Introducing 

Prezi AI.

Your new presentation assistant.

Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.

Loading…
Transcript

What's your build tool?

Metadata

Script

Lack of abstraction

Reinvent the wheel

No reuse

No standard

“Everybody’s responsibility” means “Nobody’s responsibility”

Ideal Build Tool

Parallel task execution

Ant tasks & projects executions

for migration usage

Understands IDEA’s projects

and Eclipse workspaces

Based on Rake

Uses Ruby Gems

Rake syntax

Last version 1.2.3

(Dec 2007; last commit Dec 2007)

Lacks documentation

Based on Rake (Ruby)

Tasks for Java

Maven2: project structure, artifact specs, repos

Easy calls to Ant tasks

YAML

http://jira.codehaus.org/browse/GRADLE-154

Maven-Like

Kundo

Gradle

Dependecy

Mngmt

Ant

plugins

Project

Structure

Migration

Ivy

Project

Structure

AntBuilder

Maven2, coded better

Ant-Like

Groovy

Migration

Quality

Groovy-centric replacement

for Maven2 with Ivy

Configuration in various ways:

Groovy, POM.xml, .classpath

Groovy instead of Ruby

JVM, Similar to Java

Shmant

1.0.1 - 25/09/09

DM based on Ivy

Wrappers

Nicer than Ant

Similar in spirit to Buildr

Quality

Gant

Language

Ant tools

1.8.1 - 13/10/2009

Ivy

Scripting part still in plugins!

Ivy

Ant tools

Language

Ant tools

Pre-calculated build plan

Ant in Groovy

Latest version – 0.9

(Feb 09, no commits for 8 months,

1.0 never came)

Almost no documentation

Uses Java6 scripting capabilities

Antwrap

BeanShell, Groovy, JavaScript (Rhino),

JRuby and Jython

Latest version – 0.8 (Sep 09)

German quality, +200 pages TFM

Ant in Ruby

0.7.0 - 16/02/2008

Last commit - 19/02/2008

Sophisticated multi-module

Ant tools

Ivy

Quality

Dependecy

Mngmt

Project

Structure

Ant

plugins

Antwrap

Buildr

Ant

Project

Structure

GMaven

Ruby

Migration

Quality

Groovy

Maven3

Migration

Dependecy

Mngmt

Ant

plugins

Project

Structure

Build Groovy with Maven,

Write Maven plugins in Groovy

Powerful!

Ruby-centric

replacement for Maven2

Procedure in XML

Script in Java

Control

Tasks variety

Documentation

Good code quality

GroovyMojo

Well, Maven 2.1

Quality

Migration

Ivy

Embedder

How instead of What

Lack of dependency management

Rake task

IDE ingeration

Predictive lifecycle & In/Out params

Human friendly data serialization

standard for all programming languages

1.3.5 05/10/2009

Dependency Management Tool

Exclusion

Refactoring

Lacks documentation

OSGi & Eclipse

1.0 Sep. 2009

Plugins in Java 5

(like JFrog’s AnnoMojo)

Mixins!

Error reporting

Dependecy

Mngmt

Ant

plugins

Flexible Configuration - not only scope!

Project

Structure

Migration

No delivery date

XML with attributes, Groovy

NO Plexus! (XBean)

New artifact resolution system

Maven2

Scripting still in plugins!

Admits some problems of Maven2:

code quality & artifact resolution system

“Maven is the AWT of build systems”

@puredanger

Revolution!

"What" instead of "How"

Conflict managers - per configuration

Ant (only more complicated)

Built-in Dependency Managment &

Transitive Dependencies

Convention over Configuration

Verbose XML

Scripting

Standartization and Structure

What is build?

Mainly used with Ant

  • all
  • latest-time
  • latest-revision
  • latest-compatible
  • strict
  • custom

Configuration

Poor Implementation

No separation between

metadata and scripting parts

How your project looks

Java 1.4

Everything is a plugin - Bad Idea! (Eclipse in the past)

Versions auto-update - Not reproducible build: Things “automagically” seize to work

Downloads the Internet on the first run

Project identifier

Where are the sources

Where are the resources

What are our dependencies

Poorly maintained

Never updated

No documentation

Play bad together

Concise Metadata

Corrupted local repository files

Documentation

Garbaged central repository

Limited Dependency Management

Doxia, Plexus & Friends

Dependencies exclusion:

tedious & limited

No conflict management

Procedure

vs.

Copy this to that

Compile with 1.5 target

Filter web.xml

Package war

Powerful!

Control

Tasks variety

Documentation

Good code quality

We want even more!

Revolution!

"What" instead of "How"

Real scripting language

for scripting part of the build

Built-in Dependency Managment &

Transitive Dependencies

dbcp

Spring

“Maven is the AWT of build systems”

@puredanger

XMLs

Convention over Configuration

Jar

log4j

POM.xml

Backend

JPA &

Hibernate

Classes

Standartization and Structure

Google

API

Migrating Maven2

project to Gradle

XMLs

POM.xml

The Project

Jar

POM.xml

Common

Classes

HTML

Right!

War

POM.xml

Web

Shopping

List

Classes

css

Flexible configuration

Concise metadata

Conflict resolution

Unusual

Stuff

Demo

js

Support of Current

Projects & Migration

Apache

Commons

Wicket

Usage of Maven2 tree structure

Usage of POM’s DM and ivy.xml

This will give us IDE free integration!

Language

Ant tools

Gems

Real Scripting Language

Writing scripting part in

Ruby/JRuby, Groovy, Python/Jython

Raven

Quality

Ant Tools

Java Build with

Rake and Gems

Easy usage of Ant tasks

Dependency Management

Documentation

Maintenance

Reproducible builds

Responsible distributive

Open Source

Ivy or improved Maven2 DM

Migration

Procedure:

Lancet

Project Structure

Build written in Clojure

Standard Project Structure and

Convention over Configuration

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!

It is here just for polyglothism

Version ~0.0

No commits for 9 months

Learn more about creating dynamic, engaging presentations with Prezi