Comments inline...
Based on our analysis/requirements we have reduced our choice of
implementation language to:
Java OR Groovy
Personally, I prefer Groovy for most mojo things these days, though
there are some cases where you need to mix in some plain Java classes
for performance, like if you need a custom class loader or something.
In terms of Performance, Java would beat the scripting options by a
big
percentage. However for build activities, which involve heavy Disk
IO tasks,
the performance comparisons would have to be looked at differently.
For
instance we compared the performance of a pre-compiled Groovy
script with
Java where both of them issued 100 Copy statements on a directory
containing
10 files of 10KB each and both Groovy and Java used the same Java
libraries
to do the Copy. The execution times were almost on par. We would
like to
know if others have done similar profiling and have results/
experience that
they can share. Performance is an important factor in our decision
making
and so any comments on this would be much appreciated.
For the most part you won't really notice any major performance
issues with plugins implemented in Groovy. There are a couple of
ways to roll them, but the preferred method is to compile the .groovy
bits into .class files during the plugin artifact generation, and
then the code runs as normal Java in the Maven container.
Groovy code will execute slightly slower than plain Java, but we are
talking about a fraction of a second, and for most build needs you
won't even notice it. One of the really nice things about Groovy is
that you can freely mix/match Java and Groovy code so you can use
Java where performance counts and then use Groovy for ease of
development. Only caveat right now is that you need to make sure
that Groovy code depends on Java code and Java code in the same
module does not depend on Groovy code. If you need to have the Java
code depend on Groovy, then best to make a Java interface to abstract
it. The next release of the Maven 2 integration should support the
new joint complier in Groovy 1.1 which will make this a non-issue.
In terms of Maturity, Groovy is yet to come up the mark. But given
that it
is in the process of being standardized as the sanctioned scripting
language
on Java Platform (JSR-241), I would expect it to be a safe bet.
Groovy is definitely younger than Java, but Groovy 1.0 has been out
for a while and the syntax has stabilized greatly. The latest Groovy
1.1-beta-2 is always quite stable, mostly new features added,
optimizations and other goodies. A year ago (or 2) I might not have
the same opinion, but today I think that Groovy is a very viable
solution for Maven plugin development, as for other development too.
In terms of Ease of Development and Available set of tools/
libraries for
Plugin development, Groovy's AntBuilder seems to be a very attractive
option. We have also taken a look at the available Maven Plexus
Utilities
for the same. Firstly the documentation for Plexus utilities is
poor and
secondly but more importantly the available set of Plexus utilities
do not
match up to the Ant utilties/tasks. Secondly we are talking about
build
tasks, most of which are already available in Ant and are very well
documented and tested. Thirdly Groovy's AntBuilder provides a
declarative
syntax for defining Ant tasks and makes the scripts much more
concise and
readable. Finally Groovy provides us the power of a programming
language
along with declarative Ant inclusion. These factors coupled with
the fact
that we are basically migrating our existing jelly scripts that use
ant
heavily and have so far sufficed for all our requirements, to Maven
MOJOs
makes Groovy more attractive than Java.
Groovy's AntBuilder kicks ass... <period>. This is one of the most
compelling reasons IMO for developing Maven plugins with Groovy. The
others I think come in close behind are GJDK methods (mostly the each
methods I use all the time) and closures.
The only significant problem that I've run into so far has been the
last of nested and anonymous classes... which can be worked around,
but still is quite annoying for Java developers who are used to using
them.
I am really interested to know the
views of people on Groovy vs Java for writing build tasks.
Well, for me... I'm trying to use Groovy as much as possible for
Maven plugins... partly to make sure that the Maven 2/Groovy
integration is solid and complete, but also because I find that
Groovy plugins are much more terse and easier to grok.... and less
typing means less code for me to maintain ;-)
Also I saw that the Groovy MOJO support is in alpha release. When
is it
expected to be available as a stable release?
1.0-beta-1 of the Groovy Maven 2 integration is going to be released
tomorrow, though the 1.0-alpha-3 release is already quite usable and
its configuration syntax is relatively stable. I imagine that 1.0
will be released around the same that that Groovy 1.1 is released,
which should be sometime later this year. I'm working on pushing out
updates to the Maven 2 integration every month or so depending on
time and features to be added.
There are already several plugins hosted at the Mojo project which
are implemented using the Groovy integration, like the selenium-maven-
plugin, retrotranslator-maven-plugin, jspc-maven-plugin (v2). I've
heard some reports of other plugins using it as well. I'll probably
add a list to the site docs so folks can peek at how the integration
is being used.
What is Maven team's overall
push and direction in promoting Groovy as the standard scripting
language.
I'm also interested in what the Maven teams has to say about Groovy
too :-)
Cheers,
--jason
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]