Groovy is great for scripting Java APIs in a very simple and expressive way. Providing utilities written in Groovy can sometimes be met with resistance, as any user of such a script first needs to download the appropriate version of Groovy and any other jar file dependencies. Grape helps with the dependency problem, but relies on all jar file dependencies being in a dependency repository, and the user of the script having access to a repository.
The Cookbook section of the Groovy site includes a script called WrappingGroovyScript that solves the Groovy and external jar dependency problems. As the page says, WrappingGroovyScript creates a self-contained jar file with your Groovy script, the Groovy runtime, and all other dependencies nicely bundled together. A user of your utility can then just run the generated jar using "java -jar". Very nice.
Then I got started thinking that Gradle should be able to do the same type of bundling for Groovy scripts. Here is a Gradle script that accomplishes that goal.
To use the script, just copy the contents of the Gist into your own build.gradle file, change the mainClassName, and add your dependencies.
That's it! Very simple and elegant, even smaller than the WrappingGroovyScript solution.
Thanks, great post.
ReplyDeleteI made it part of my set up routine for creating a new project from a groovy script: http://blog.tempusvolat.com/2013/04/22/how-to-set-up-a-new-groovy-project-in-gradle/