Update 2017-03-04: Gradle no longer has these problems.
One of the most important features of the Maven family of build tools, of which
Gradle is a member, is the ability to automatically download dependencies and
configure the Java classpath. The latter often is the more important part of
the feature — unlike virtually every other module-based environment, the JVM is
bafflingly incapable of locating dependencies itself (eg, from a standardised
location as in C).
Gradle’s implementation, however, is rather problematic. Virtually every task
undertaken by Gradle — including simply invoking the javac
compiler —
involves spawning a child Gradle process, whose classpath includes that of the
user code in question. This is perfectly fine as long as the user code’s
dependencies are disjoint from Gradle’s; had gradle been written without any
non-JRE dependencies, it wouldn’t be an issue at all.
But Gradle isn’t at all light-weight — its memory footprint dwarfs that of
Windows XP — and it has almost as many dependencies as one might suspect.
Today, we’ll be talking about how Groovy doesn’t seem to have a consistent idea
of what an identifier is. It’s not a very large topic, and it really isn’t a
problem, but it is a topic that nevertheless merits mention, and it allows me
to introduce…
Gr- — (Javanese) Agglunative prefix, typically indicating
expectation of a painful experience, often due to lack of forethought
or impropper planning.
Example constructs include:
Groovy — Adjective. Characterised by a large number of hacks
attempting to make things better, but which really only increase the
number of problems by an order of magnitude. “That’s some groovy
code you’ve got there. I especially like how it uses the query
parameters to dynamically select the class and static method to
execute.”
Grail(s) — Verb (almost always found in the singular present). To
inflict suffering and confusion by means of unnecessary complexity, self
contradiction, and annoying surprises separated by excrutiating waits. “It
really grails me how this ‘convention over configuration’ framework
requires three multi-thousand-line configuration files to run.”
Gradle — Noun. An obstensibly comfortable, metaphorical location in
which something is cradled before finally succumbing to death. “After having
been in gradle for a few months, we found that the code had become
impossible to update, due to library version conflicts.”