Gant and Gradle

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Gant and Gradle

Russel Winder-2
Please excuse the very wide initial circulation of this, but I want to
make sure people are aware that there is a debate that might affect
them.  I suspect the best place for the debate is the Gant Users email
list, so if people could be careful about which list they reply to when
replying then people not interested in the debate will not get flooded
-- i.e. please check carefully where you are sending replies if you
reply to this email.  Thanks.

Ever since Hans Dockter realized that he was not going to be able to
build Gradle on Gant, but would have to have a new code base to achieve
his goals, there has been a tension between the roles of Gant and
Gradle.  The core technical difference between Gant and Gradle is that
Gant is simply a scripting systems whereas Gradle works with a DAG as do
Make, Ant, Maven, SCons, etc. -- Gant is the odd one out here as a build
framework, it does not build a data structure and reflect on that, it
just executes code.

On and off over the last year (and very much on over the last couple of
weeks) Hans and I have debated (privately) this issue of the tension
between Gant and Gradle.  Now though is the right time to open and widen
this debate.

In the Java milieu, Ant and Maven are the dominant build tools, though
as an increasing number of people are realizing, using Groovy instead of
XML as the build specification notation is a Big Win (tm) -- I get a
continuous stream of emails (and I am sure Hans gets analogous emails)
saying "Wow I just tried Gant and it is just so much nicer than Ant as
Groovy is just so much better than XML".  So the core question is how to
make a Groovy-based build framework the dominant player in the Java
world.  Should we push both Gant and Gradle independently and see what
happens or should we engineer things a little more so as to have a
greater chance of success?

There are many issues here, a few of which follow:

Gant is just a scripting system and so doesn't really have all the
infrastructure to do many of the things expected of a build framework,
Gradle does.  This implies Gradle is a better weapon for getting Groovy
as the major build framework.

Gant is just a single jar and so is very lightweight whereas Gradle has
a lot of dependencies and is relatively heavyweight.  Of course Gant is
just a scripting replacement for the XML front end to Ant  whereas
Gradle is a complete Ivy-based build framework that supports management
over the whole project lifecycle.

People are increasingly asking for changes to Gant that can be achieved
in a way, but really need DAG support which is already handled by
Gradle.

Gradle can support many of the Ant task scripting things that Gant does
but Gant is so much more lightweight than Gradle for doing this.

No-one seems to be interested in supporting Gant plugins for Eclipse,
NetBeans or IntelliJ IDEA which is limiting its acceptance where IDEs
are mandatory whereas work is in progress on Gradle plugins -- at least
for Eclipse.

There are many other issues but this will do for the present (to try and
keep this email to some semblance of reasonable length :-)

Where am I going with this?

I am increasingly of the view that Gant should cease trying to be a
build framework and leave this role to a rapidly evolving Gradle.  Gant
should instead reposition itself as a lightweight, embeddable Ant task
scripting system.  This is exactly how it is used in Grails.  Embedding
Gradle to do the Ant task scripting would for me be using too
heavyweight a tool for the task at hand -- though having a Gradle rather
than an Ant build for Grails and indeed Groovy might be a good move.

Recently a number of people have made proposals for change to Gant and
many of these are good proposals (especially the ones accompanied by
patches :-) and I propose to evolve Gant with these proposals where they
fit with Gant being just a lightweight Ant task scripting system.  Where
the changes are more to do with Gant becoming an improved build
framework, I am contemplating not making the changes -- especially those
where Gradle already does that which is needed.

OK, I think this introduces the base issues, and this email is already
long.  I am therefore opening things to the floor to see what the Gant,
Gradle, Groovy and Grails communities think about this.  Should Gant and
Gradle compete or should they be realigned and collaborate?

Thanks.

--
Russel.
====================================================
Dr Russel Winder                 Partner

Concertant LLP                   t: +44 20 7585 2200, +44 20 7193 9203
41 Buckmaster Road,              f: +44 8700 516 084
London SW11 1EN, UK.             m: +44 7770 465 077

signature.asc (196 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Gant and Gradle

hans_d
Administrator
Hi,

On Oct 4, 2008, at 11:07 AM, Russel Winder wrote:

<snip>

>
> Ever since Hans Dockter realized that he was not going to be able to
> build Gradle on Gant, but would have to have a new code base to  
> achieve
> his goals, there has been a tension between the roles of Gant and
> Gradle.  The core technical difference between Gant and Gradle is that
> Gant is simply a scripting systems whereas Gradle works with a DAG  
> as do
> Make, Ant, Maven, SCons, etc.

Maven unfortunately does not use a DAG. This is another reason for  
its inflexibility IMO.

> -- Gant is the odd one out here as a build
> framework, it does not build a data structure and reflect on that, it
> just executes code.

I would say that Gant uses an implicit DAG created at runtime. This  
is what the 'depends' call is all about, isn't it. To me this is the  
same way as Ant is doing things.

<snip>

> Gant is just a single jar and so is very lightweight whereas Gradle  
> has
> a lot of dependencies and is relatively heavyweight.

This is a very valid point. Therefore we will put a lot of effort  
into modularization soon.

<snip>

> Gradle can support many of the Ant task scripting things that Gant  
> does
> but Gant is so much more lightweight than Gradle for doing this.

Definitely in terms of size and dependencies (see above). Do you also  
see a difference in regard to coding?

>
> I am increasingly of the view that Gant should cease trying to be a
> build framework and leave this role to a rapidly evolving Gradle.  
> Gant
> should instead reposition itself as a lightweight, embeddable Ant task
> scripting system.  This is exactly how it is used in Grails.  
> Embedding
> Gradle to do the Ant task scripting would for me be using too
> heavyweight a tool for the task at hand -- though having a Gradle  
> rather
> than an Ant build for Grails and indeed Groovy might be a good move.

I think it is time for Groovy (I don't know the Grails build) to show  
the world by its build the advantages of a Groovy based internal DSL :)

<snip>

- Hans

--
Hans Dockter
Gradle Project lead
http://www.gradle.org





---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email