DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Elevate your data management. Join a lively chat to learn how streaming data can improve real-time decision-making, and how to reduce costs.

Platform Engineering: Enhance the developer experience, establish secure environments, automate self-service tools, and streamline workflows

Build Cloud resilience. High-profiled cloud failures have shown us one thing – traditional approaches aren't enough. Join the discussion.

Data Engineering: The industry has come a long way from organizing unstructured data to adopting today's modern data pipelines. See how.

Avatar

Russel Winder

Joined Oct 2006

Stats

Reputation: 3
Pageviews: 8.9K
Articles: 1
Comments: 65
  • Articles
  • Comments

Articles

article thumbnail
Gant 1.9.5 released
There was a regression in the 1.9.4 release of Gant that could not be ignored. The problem has been corrected, and a new release candidate checked by the people who found the regression (thanks due to Jeff Brown and the Grails folk). There is therefore a shiny new Gant 1.9.5 release. Everything should be in place at Codehaus already and Maven will get updated as soon as the Codehaus -> Maven sync happens. The regression whilst essentially trivial, was sufficiently fundamental that I have taken the drastic step of removing the 1.9.4 release from everywhere. This should have no effect on people using Groovy 1.7 or 1.8, they should use Gant 1.9.5. People still using Groovy 1.6 will not see a Gant 1.9.5 and will have to stay weith Gant 1.9.3. Of course people still using Groovy 1.6 should upgrade to 1.8.0 immediately and therefore not have a problem with Gant :-)
May 3, 2011
· 80 Views

Comments

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

Java 8 is closing over references not values, so yes there is a requirement of final and that irritates.

Without an example, your point about curly brace parameter lists is a bit vacuous I'm afraid.

Scala is a lot better than Java in so many ways, but it is becoming the Algol68 of the JVM. Algol68 was by far the best programming language of the 1960s, but it was too complex and so had little take up. Scala risks this position by trying to bring Type Theory mentality to programming. Certainly not wrong, but not populist. Hence Kotlin and Ceylon. The 1960s gave us C instead of Algol68, I suspect the 2010s will give us a language other than Scala. It's not about quality, it's about what the average programmer is prepared to use.

Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 11, 2013 · DM 1407

I wonder if you meant to update the first line to:

Iterator<Integer> it = Arrays.asList(1,2,3,4,5).iterator();
Free CSS templates includes some by Andreas Viklund

Jan 10, 2013 · DM 1407

Your Java example is not compilable: the ArrayList object cannot be constructed like that. You probably meant to use Arrays.asList. Of course even with Arrays.asList(1, 2, 3, 4, 5) being used the example fails because Iterator.remove is an optional method and throws java.lang.UnsupportedOperationException.

Move forward to Java 8 and you get to write something like:

Arrays.asList(1,2,3,4,5).filter(x -> x > 3)

So then Scala has zero win over Java.

Using YAML for Java Application Configuration

Dec 10, 2012 · James Sugrue

It strikes me as ironic that in an article on YAML instead of JSON or whatever as a configuration notation for Java systems, no comment is made on how hugely verbose the use of XML in Maven is. Why doesn't Maven use YAML for its specification?

Camera input tag

Sep 27, 2012 · Mr B Loid

Any good router with NAT switched on will handle all this port forwarding very straightforwardly. I don't understand why it is such a big deal for you such that you need to write your own system.
Tech firms fare better than most in jobs slump

Sep 10, 2012 · Tyrell Perera

Raoul,

It is bizarre how much disinformation gets promulgated via the Web isn't it! It is a great pity more programmers do not read these great books. e.g Cormen et al.

Tech firms fare better than most in jobs slump

Sep 08, 2012 · Tyrell Perera

Mergesort? Modified Tim Sort?
pyflakes: The Passive Checker of Python Programs

Jun 16, 2012 · Will Soprano

getWeight is just fine, there is no rule that the first positional parameter of a method has to be called self, it just has to exist. Here you call it this, not the standard idiom, but perfectly valid.
Goodbye Flash, Silverlight, AIR and other plug-ins

Jun 16, 2012 · rick mans

Clearly there is prior art, but nontheless the USPTO issued a patent on the data structure in early 2000s. This means in the USA the company owning the patent could start claiming licence fees. Clearly a strong defendant would go to court and get the patent reviewed. The only winners are the lawyers.
Goodbye Flash, Silverlight, AIR and other plug-ins

Jun 16, 2012 · rick mans

Clearly there is prior art, but nontheless the USPTO issued a patent on the data structure in early 2000s. This means in the USA the company owning the patent could start claiming licence fees. Clearly a strong defendant would go to court and get the patent reviewed. The only winners are the lawyers.
Goodbye Flash, Silverlight, AIR and other plug-ins

Jun 16, 2012 · rick mans

Clearly there is prior art, but nontheless the USPTO issued a patent on the data structure in early 2000s. This means in the USA the company owning the patent could start claiming licence fees. Clearly a strong defendant would go to court and get the patent reviewed. The only winners are the lawyers.
Goodbye Flash, Silverlight, AIR and other plug-ins

Jun 16, 2012 · rick mans

Clearly there is prior art, but nontheless the USPTO issued a patent on the data structure in early 2000s. This means in the USA the company owning the patent could start claiming licence fees. Clearly a strong defendant would go to court and get the patent reviewed. The only winners are the lawyers.
Goodbye Flash, Silverlight, AIR and other plug-ins

Jun 16, 2012 · rick mans

Clearly there is prior art, but nontheless the USPTO issued a patent on the data structure in early 2000s. This means in the USA the company owning the patent could start claiming licence fees. Clearly a strong defendant would go to court and get the patent reviewed. The only winners are the lawyers.
Goodbye Flash, Silverlight, AIR and other plug-ins

Jun 16, 2012 · rick mans

Clearly there is prior art, but nontheless the USPTO issued a patent on the data structure in early 2000s. This means in the USA the company owning the patent could start claiming licence fees. Clearly a strong defendant would go to court and get the patent reviewed. The only winners are the lawyers.
Goodbye Flash, Silverlight, AIR and other plug-ins

Jun 15, 2012 · rick mans

BTW Working with doubly linked list such as this is far harder in Java than it is with C, C++, etc. In those languages you can have pointers to pointers and the code becomes much shorter, simpler and more comprehensible.
Goodbye Flash, Silverlight, AIR and other plug-ins

Jun 15, 2012 · rick mans

Do remember though that there is a USA patent on linked lists: http://www.google.co.uk/patents/US7028023 So if you use this algorithm in code that is sold in the USA, the patent trolls will come and get you.
Binding POJO with XmlPullParser from socket stream

Mar 23, 2012 · $$ANON_USER$$

It is perhaps worth noting that I maintain artefacts in the Maven and Codehaus repositories for all the JSR166 artefacts based on Doug's CVS repository. This saves people having to download and install.

A version 1.7.0 was released some time ago and is in the Maven repository groupId=org.codehaus.jsr166-mirror, artefacts are jsr166, jsr166tck, jsr166x, jsr166y, extra166y, version=1.7.0.

Artefacts from CVS HEAD are published more or less as they are committed to CVS to the Codehaus snapshots repository (http://snapshots.repository.codehaus.org) groupId=org.codehaus.jsr166-mirror, artefacts are jsr166, jsr166tck, jsr166x, jsr166y, extra166y, and jsr166r, version=1.7.0.1-SNAPSHOT.

IE7.js version 2.0 (beta)

Mar 02, 2012 · Mr B Loid

Use functools.wraps rather than setting the function object metadata manually?
Mootools beats jQuery and Ext for AIR

Oct 31, 2011 · Gerd Storm

Git is great but can be tricky at the beginning.
Which is why many people prefer Mercurial and/or Bazaar. These two DVCSs are equally good as Git and are far, far easier to start using.
Mootools beats jQuery and Ext for AIR

Oct 31, 2011 · Gerd Storm

"Most open source projects have moved to GIT and the ones that didn't yet are in the process of doing it." I think this is FUD. I bet most (as in > 50%) open source projects are actually still using CVS or Subversion. And remember many open source projects choosing to move from CVS or Subversion choose Mercurial or Bazaar in preference to Git. There is absolutely no need for this sort of FUD, Git doesn't need it, nor dies GitHub, and it is disingenuous towards Mercurial, BitBucket, Bazaar and Launchpad.
Rails / Dreamhost / Capistrano Deployment Tutorial

May 27, 2010 · John Tudor

Even looking at java.util.concurrent would be a start. Then possible http://gpars.codehaus.org.
Rails / Dreamhost / Capistrano Deployment Tutorial

May 27, 2010 · John Tudor

Even looking at java.util.concurrent would be a start. Then possible http://gpars.codehaus.org.
Rails / Dreamhost / Capistrano Deployment Tutorial

May 27, 2010 · John Tudor

Even looking at java.util.concurrent would be a start. Then possible http://gpars.codehaus.org.
Rails / Dreamhost / Capistrano Deployment Tutorial

May 27, 2010 · John Tudor

Even looking at java.util.concurrent would be a start. Then possible http://gpars.codehaus.org.
Rails / Dreamhost / Capistrano Deployment Tutorial

May 27, 2010 · John Tudor

This article saddens me: it shows a deep lack of understanding and appreciation of what concurrency and parallelism in programming are really about, and adds nothing to the blogosphere, let alone the pool of human knowledge. I believe the author should learn about the subject before pontificating on it. I'm afraid I'm with Scott Hickey on this one.
Making Magic with .htaccess Files

Apr 16, 2009 · Michael Bernat

Clojure is not a new language, it is a dialect of Lisp running on a JVM -- with access to the installed Java etc. libraries. Lisp is as old as Fortran and Cobol. Yet Lisp (and hence Clojure) remains unique amongst programming languages in that there is no syntactic distinction between code and data. This makes for some seriously interesting programming techniques -- notwithstanding the old prejudice against self-modifying code.

It would be sad if Lisp died simply because it was old.

Re Java: The sooner the JVM is fixed to support parameterized types, and type erasure is removed, the sooner Java will be a language it is possible to use. CLR got this issue right. Arguments about backward compatibility do not wash since the JVM changed anyway to support annotations.

Multi-tasking the Java platform: What's the Big Deal?

Feb 19, 2009 · Mr B Loid

Ant vs. Maven is something of a non-issue since the modern approach to build is to use Gradle or possibly Gant
The Three Pillars of Continuous Integration

Dec 16, 2008 · Meera Subbarao

[quote=jwenting]

Yes, these systems have value and can work as part of a build system, but they're no Holy Grail. That's all we were trying to mention, giving arguments as to why such is the case.

[/quote]

This is the crucial point, and one I fully agree with. Competant and good programmers know the value of CI and use it effectively and well. No amount of pushing CI (or any other "Silver Bullet" for that matter) on bad programmers will help them climb out of the morass of their lives. Sadly.

The Three Pillars of Continuous Integration

Dec 16, 2008 · Meera Subbarao

[quote=jwenting]

Yes, these systems have value and can work as part of a build system, but they're no Holy Grail. That's all we were trying to mention, giving arguments as to why such is the case.

[/quote]

This is the crucial point, and one I fully agree with. Competant and good programmers know the value of CI and use it effectively and well. No amount of pushing CI (or any other "Silver Bullet" for that matter) on bad programmers will help them climb out of the morass of their lives. Sadly.

The Three Pillars of Continuous Integration

Dec 15, 2008 · Meera Subbarao

Jeroen,

I think you need to take a reality check: to try and claim "hardly anyone uses" Bazaar, Mercurial or Git indicates a serious lack of observation of the real world. Moreover they all have plugins for Eclipse, IntelliJ IDEA and NetBeans, so even people incapable of using a command line have access to the tools.

Oh and Gant and Gradle have plugins for Hudson. So whilst it may be true that there are currently fewer users of these systems than Ant or Maven, the tools do exist and they are not poor.

The Three Pillars of Continuous Integration

Dec 15, 2008 · Meera Subbarao

I think the image and blurb need a bit of an update:

Version control should surely emphasize Bazaar, Mercurial and Git which in all cases are superior to CVS and Subversion.

Build should surely emphasize Gradle and Gant rather than Ant and Nant :-)

Testing vocabulary

Sep 27, 2008 · Andrew Glover

One small point on the Gant code: Ant is deprecated and ant should be used in code such as

ant.echo ( message : "hello" )

Also inside targets you don't actually need the ant. at all, you can just use echo and the Ant echo task will be called, unless you have defined a function called echo or a closure referred to by a variable called echo.

Ant or Gant?

Sep 27, 2008 · Meera Subbarao

One small point on the Gant code: Ant is deprecated and ant should be used in code such as

ant.echo ( message : "hello" )

Also inside targets you don't actually need the ant. at all, you can just use echo and the Ant echo task will be called, unless you have defined a function called echo or a closure referred to by a variable called echo.

Testing vocabulary

Sep 27, 2008 · Andrew Glover

Thanks to Meera for the article, and thanks to everyone who has commented for commenting.

First let me deal with the "build specification is data" vs "build specification is program" issue. Ant XML tried to be a pure functional language so as to make build specifications declarative. This works for small projects but fails for even medium sized projects since even selection is clumsy in Ant XML. As soon as you need some form of variation in the build, Ant XML becomes awkward. Maven attempted to go to the next stage of declarative expression by applying convention over configuration and trying to remove all process from the build specification. Again for simple projects it succeeds, but for complex projects, much hacking (in the less than best sense) is needed. Experience shows us that for medium sized and large projects, the build process has to be specified with a program that has to have easy decision making. Yes things should be as declarative as possible, so avoiding explicit looping is a good guideline, but build is a process and so needs a program.

Second let me deal with the "Why Groovy not Java?" issue? I was aware of Gosling and now I see there is PJMake, there are probably others as well. There are two issues here a) the projects are not building on the Ant or Maven infrastructures and so are a revolution rather than an evolution to switch to; and b) Java is a verbose language not easily suited to creating domain specific languages (DSLs) -- not having a metaobject protocol is a barrier to some of the techniques that make writing DSLs easy and straightforward.

For good or ill Ant and Maven are the de facto standard build systems in the Java milieu. In the Ruby milieu there is Rake and in the C, C++, Fortran, and LaTeX milieux there is (the venerable) Make, (the almost mandatory) Autotools, and (the very much better than either of these) SCons. What is sadly lacking is a build system that caters for all these. C, C++ and LaTeX support in Ant and Maven is poor. Moreover C, C++ and LaTeX builds generally require more process information than Java builds.

So here is the pain: Ant has some great infrastructure but could do with more in certain areas, and XML is not the right notation for specifying process. So what is the language for writing process? In the Java milieu, the choices are Java, Groovy, Jython, JRuby, BeanShell. For me Java is too static for this task, a dynamic language is needed. For me the choice is Groovy, others have taken an alternative approach. Buildr is a Maven replacement using JRuby and Rake, Gradle is a Maven and Ant replacement written in Groovy and Java based on Ivy.

So the way of reducing the pain induced by Ant was to replace the XML processing with Groovy processing with as light a weight front end as possible. Gant is literally just a way of scripting Ant tasks with the added extra of being able to define new add-ons in Groovy.

It seems this evolution of just replacing the XML processing with Groovy processing has hit a chord. I am daily getting emails saying something along the lines of "Hey this is great, I don't need to learn a new infrastructure, but now I can express my build so much more easily." So using Groovy scripting instead of XML hacking appears to have solved a problem for many, many people.

On the question of why a dynamic language? The core issue here is the ability to synthesize dependencies. With Make you must specify explicitly all the dependencies. What SCons and then Rake brought to the game was the ability to program dependencies. This is a revolution in build specification, and one that cannot be achieved with XML without some serious hacking. Dynamic languages are thus the natural tool for specifying dependency.

So what of the future? Well Ant and Maven will continue to dominate but slowly I think Gant is expanding as Ant users see that Groovy beats XML for build specification and that they can evolve their build system bit by bit from Ant XML to Gant Groovy.

What about Gradle (and Buildr, Gosling, PJMake, etc.) well where there are new projects this is clearly an option since there is no extant build infrastructure. Where Gant wins is where there is extant build infrastructure that needs evolving. Gant is a stepping stone from Ant XML to the easier world of Groovy programming. Gant brings to the Java milieu the approach that SCons and Rake have established elsewhere. If this then leads people onto Gradle fine, but I think both Gant and Gradle will be increasingly used for different aspects of things.

Apologies for going on so long, and thanks again to Meera for the article.

Footnote: Gradle was originally going to be built on top of Gant, but Hans Dockter found he was unable to cleanly express the things he needed, so he started again from scratch. In a sense Gradle can subsume Gant since everything you can do in Gant you can do in Gradle. However I suspect the two will have take up since Gant can be sneaked in to an extant Ant build more easily than Gradle, whereas for new projects Gradle has a more "whole project management" aspect that means it is the system of choice over Maven. Gant is lightweight Ant task scripting and Groovy programming, Gradle is full on project control.

Ant or Gant?

Sep 27, 2008 · Meera Subbarao

Thanks to Meera for the article, and thanks to everyone who has commented for commenting.

First let me deal with the "build specification is data" vs "build specification is program" issue. Ant XML tried to be a pure functional language so as to make build specifications declarative. This works for small projects but fails for even medium sized projects since even selection is clumsy in Ant XML. As soon as you need some form of variation in the build, Ant XML becomes awkward. Maven attempted to go to the next stage of declarative expression by applying convention over configuration and trying to remove all process from the build specification. Again for simple projects it succeeds, but for complex projects, much hacking (in the less than best sense) is needed. Experience shows us that for medium sized and large projects, the build process has to be specified with a program that has to have easy decision making. Yes things should be as declarative as possible, so avoiding explicit looping is a good guideline, but build is a process and so needs a program.

Second let me deal with the "Why Groovy not Java?" issue? I was aware of Gosling and now I see there is PJMake, there are probably others as well. There are two issues here a) the projects are not building on the Ant or Maven infrastructures and so are a revolution rather than an evolution to switch to; and b) Java is a verbose language not easily suited to creating domain specific languages (DSLs) -- not having a metaobject protocol is a barrier to some of the techniques that make writing DSLs easy and straightforward.

For good or ill Ant and Maven are the de facto standard build systems in the Java milieu. In the Ruby milieu there is Rake and in the C, C++, Fortran, and LaTeX milieux there is (the venerable) Make, (the almost mandatory) Autotools, and (the very much better than either of these) SCons. What is sadly lacking is a build system that caters for all these. C, C++ and LaTeX support in Ant and Maven is poor. Moreover C, C++ and LaTeX builds generally require more process information than Java builds.

So here is the pain: Ant has some great infrastructure but could do with more in certain areas, and XML is not the right notation for specifying process. So what is the language for writing process? In the Java milieu, the choices are Java, Groovy, Jython, JRuby, BeanShell. For me Java is too static for this task, a dynamic language is needed. For me the choice is Groovy, others have taken an alternative approach. Buildr is a Maven replacement using JRuby and Rake, Gradle is a Maven and Ant replacement written in Groovy and Java based on Ivy.

So the way of reducing the pain induced by Ant was to replace the XML processing with Groovy processing with as light a weight front end as possible. Gant is literally just a way of scripting Ant tasks with the added extra of being able to define new add-ons in Groovy.

It seems this evolution of just replacing the XML processing with Groovy processing has hit a chord. I am daily getting emails saying something along the lines of "Hey this is great, I don't need to learn a new infrastructure, but now I can express my build so much more easily." So using Groovy scripting instead of XML hacking appears to have solved a problem for many, many people.

On the question of why a dynamic language? The core issue here is the ability to synthesize dependencies. With Make you must specify explicitly all the dependencies. What SCons and then Rake brought to the game was the ability to program dependencies. This is a revolution in build specification, and one that cannot be achieved with XML without some serious hacking. Dynamic languages are thus the natural tool for specifying dependency.

So what of the future? Well Ant and Maven will continue to dominate but slowly I think Gant is expanding as Ant users see that Groovy beats XML for build specification and that they can evolve their build system bit by bit from Ant XML to Gant Groovy.

What about Gradle (and Buildr, Gosling, PJMake, etc.) well where there are new projects this is clearly an option since there is no extant build infrastructure. Where Gant wins is where there is extant build infrastructure that needs evolving. Gant is a stepping stone from Ant XML to the easier world of Groovy programming. Gant brings to the Java milieu the approach that SCons and Rake have established elsewhere. If this then leads people onto Gradle fine, but I think both Gant and Gradle will be increasingly used for different aspects of things.

Apologies for going on so long, and thanks again to Meera for the article.

Footnote: Gradle was originally going to be built on top of Gant, but Hans Dockter found he was unable to cleanly express the things he needed, so he started again from scratch. In a sense Gradle can subsume Gant since everything you can do in Gant you can do in Gradle. However I suspect the two will have take up since Gant can be sneaked in to an extant Ant build more easily than Gradle, whereas for new projects Gradle has a more "whole project management" aspect that means it is the system of choice over Maven. Gant is lightweight Ant task scripting and Groovy programming, Gradle is full on project control.

dzone.com blog: Doing what's best for you, not us...

Feb 13, 2008 · admin

Using Groovy and AntBuilder is great but there is a lot of infrastructure that everyone will replicate. Enter Gant (http://gant.codehaus.org). The whole point of Gant is to allow build specifications to be written in Groovy using the AntBuilder but with all the core boilerplate code already done for you.

I like Maven though, well for projects that fit the Maven model anyway. So Gant has the Maven target set. I have a project for which the Gant script is:

includeTargets ** gant.targets.Maven * [
groupId : 'org.devjavasoft' ,
artifactId : 'ads' ,
version : '3.1.0' ,
javaCompileProperties : [ source : '1.6' , target : '1.6' , debug : 'true' ] ,
testFramework : 'testng'
]

cleanPattern << '**/*~'

setDefaultTarget ( test )

I like Ant and the Ant tasks as well, especially where flexibility is required, but I hate writing specifications in XML, especially when the build algorithm cannot be specified as a purely functional program. So Gant is ideal for me in this context; it uses all the Ant tasks (include the Maven Ant Task and the Ivy Ant task) but scripted using a dynamic language, Groovy.

dzone.com blog: Doing what's best for you, not us...

Feb 13, 2008 · admin

Using Groovy and AntBuilder is great but there is a lot of infrastructure that everyone will replicate. Enter Gant (http://gant.codehaus.org). The whole point of Gant is to allow build specifications to be written in Groovy using the AntBuilder but with all the core boilerplate code already done for you.

I like Maven though, well for projects that fit the Maven model anyway. So Gant has the Maven target set. I have a project for which the Gant script is:

includeTargets ** gant.targets.Maven * [
groupId : 'org.devjavasoft' ,
artifactId : 'ads' ,
version : '3.1.0' ,
javaCompileProperties : [ source : '1.6' , target : '1.6' , debug : 'true' ] ,
testFramework : 'testng'
]

cleanPattern << '**/*~'

setDefaultTarget ( test )

I like Ant and the Ant tasks as well, especially where flexibility is required, but I hate writing specifications in XML, especially when the build algorithm cannot be specified as a purely functional program. So Gant is ideal for me in this context; it uses all the Ant tasks (include the Maven Ant Task and the Ivy Ant task) but scripted using a dynamic language, Groovy.

dzone.com blog: Doing what's best for you, not us...

Feb 13, 2008 · admin

Using Groovy and AntBuilder is great but there is a lot of infrastructure that everyone will replicate. Enter Gant (http://gant.codehaus.org). The whole point of Gant is to allow build specifications to be written in Groovy using the AntBuilder but with all the core boilerplate code already done for you.

I like Maven though, well for projects that fit the Maven model anyway. So Gant has the Maven target set. I have a project for which the Gant script is:

includeTargets ** gant.targets.Maven * [
groupId : 'org.devjavasoft' ,
artifactId : 'ads' ,
version : '3.1.0' ,
javaCompileProperties : [ source : '1.6' , target : '1.6' , debug : 'true' ] ,
testFramework : 'testng'
]

cleanPattern << '**/*~'

setDefaultTarget ( test )

I like Ant and the Ant tasks as well, especially where flexibility is required, but I hate writing specifications in XML, especially when the build algorithm cannot be specified as a purely functional program. So Gant is ideal for me in this context; it uses all the Ant tasks (include the Maven Ant Task and the Ivy Ant task) but scripted using a dynamic language, Groovy.

dzone.com blog: Doing what's best for you, not us...

Feb 13, 2008 · admin

Using Groovy and AntBuilder is great but there is a lot of infrastructure that everyone will replicate. Enter Gant (http://gant.codehaus.org). The whole point of Gant is to allow build specifications to be written in Groovy using the AntBuilder but with all the core boilerplate code already done for you.

I like Maven though, well for projects that fit the Maven model anyway. So Gant has the Maven target set. I have a project for which the Gant script is:

includeTargets ** gant.targets.Maven * [
groupId : 'org.devjavasoft' ,
artifactId : 'ads' ,
version : '3.1.0' ,
javaCompileProperties : [ source : '1.6' , target : '1.6' , debug : 'true' ] ,
testFramework : 'testng'
]

cleanPattern << '**/*~'

setDefaultTarget ( test )

I like Ant and the Ant tasks as well, especially where flexibility is required, but I hate writing specifications in XML, especially when the build algorithm cannot be specified as a purely functional program. So Gant is ideal for me in this context; it uses all the Ant tasks (include the Maven Ant Task and the Ivy Ant task) but scripted using a dynamic language, Groovy.

dzone.com blog: Doing what's best for you, not us...

Feb 13, 2008 · admin

Using Groovy and AntBuilder is great but there is a lot of infrastructure that everyone will replicate. Enter Gant (http://gant.codehaus.org). The whole point of Gant is to allow build specifications to be written in Groovy using the AntBuilder but with all the core boilerplate code already done for you.

I like Maven though, well for projects that fit the Maven model anyway. So Gant has the Maven target set. I have a project for which the Gant script is:

includeTargets ** gant.targets.Maven * [
groupId : 'org.devjavasoft' ,
artifactId : 'ads' ,
version : '3.1.0' ,
javaCompileProperties : [ source : '1.6' , target : '1.6' , debug : 'true' ] ,
testFramework : 'testng'
]

cleanPattern << '**/*~'

setDefaultTarget ( test )

I like Ant and the Ant tasks as well, especially where flexibility is required, but I hate writing specifications in XML, especially when the build algorithm cannot be specified as a purely functional program. So Gant is ideal for me in this context; it uses all the Ant tasks (include the Maven Ant Task and the Ivy Ant task) but scripted using a dynamic language, Groovy.

dzone.com blog: Doing what's best for you, not us...

Feb 13, 2008 · admin

Using Groovy and AntBuilder is great but there is a lot of infrastructure that everyone will replicate. Enter Gant (http://gant.codehaus.org). The whole point of Gant is to allow build specifications to be written in Groovy using the AntBuilder but with all the core boilerplate code already done for you.

I like Maven though, well for projects that fit the Maven model anyway. So Gant has the Maven target set. I have a project for which the Gant script is:

includeTargets ** gant.targets.Maven * [
groupId : 'org.devjavasoft' ,
artifactId : 'ads' ,
version : '3.1.0' ,
javaCompileProperties : [ source : '1.6' , target : '1.6' , debug : 'true' ] ,
testFramework : 'testng'
]

cleanPattern << '**/*~'

setDefaultTarget ( test )

I like Ant and the Ant tasks as well, especially where flexibility is required, but I hate writing specifications in XML, especially when the build algorithm cannot be specified as a purely functional program. So Gant is ideal for me in this context; it uses all the Ant tasks (include the Maven Ant Task and the Ivy Ant task) but scripted using a dynamic language, Groovy.

dzone.com blog: Doing what's best for you, not us...

Feb 13, 2008 · admin

Using Groovy and AntBuilder is great but there is a lot of infrastructure that everyone will replicate. Enter Gant (http://gant.codehaus.org). The whole point of Gant is to allow build specifications to be written in Groovy using the AntBuilder but with all the core boilerplate code already done for you.

I like Maven though, well for projects that fit the Maven model anyway. So Gant has the Maven target set. I have a project for which the Gant script is:

includeTargets ** gant.targets.Maven * [
groupId : 'org.devjavasoft' ,
artifactId : 'ads' ,
version : '3.1.0' ,
javaCompileProperties : [ source : '1.6' , target : '1.6' , debug : 'true' ] ,
testFramework : 'testng'
]

cleanPattern << '**/*~'

setDefaultTarget ( test )

I like Ant and the Ant tasks as well, especially where flexibility is required, but I hate writing specifications in XML, especially when the build algorithm cannot be specified as a purely functional program. So Gant is ideal for me in this context; it uses all the Ant tasks (include the Maven Ant Task and the Ivy Ant task) but scripted using a dynamic language, Groovy.

User has been successfully modified

Failed to modify user

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: