Download the binary and unpack it to /usr/local
and make a symlink: /usr/local# ln -s groovy-1.6.5 groovy
Add groovy bin directory to your invironment variables:
# /etc/profile.d/jdk.sh ... export GROOVY_HOME=/usr/local/groovy export PATH="$PATH:$GROOVY_HOME/bin"
groovyConsole is a GUI app for evaluating Groovy scripts and groovysh is an interactiove CLI app for evaluating Groovy expressions.
groovy ist the interpreter for Groovy scripts (see below) and groovyc
is the compiler which compiles Groovy scripts to java classes (see below)
#!/usr/bin/env groovy println "Hallo Sandy!"
// file: test.groovy println args[0]+ ' '+ args[1]+ ' '+ args[2]+ ' '+ args.length
Invoking the script with test.groovy one two three
prints one two three 3
.
See also Groovy+CLI
System.in.text
A script automatically creates a class which has the same name as the filename of the script:
#!/usr/bin/env groovy // Filname: groovytest println this.class // prints: class groovytest println getClass() // prints: class groovytest println this.getClass() // prints: class groovytest
The first version is a class literal and seems to be a shortcut for calling getClass().
println
seems to call implizitely toString()
on any object. (This is the same as System.out.println()
in standard java.):
println this.class // prints: class groovytest println this.class.toString() // prints: class groovytest
The parent class of the autogenerated script class is groovy.lang.Script
:
println this.class.getSuperclass() // prints: groovy.lang.Script
println()
is a method of the autogenerated script class (inherited from groovy.lang.Script
). It can be called without this.
and braces. This seems to be added automatically, because the following call prints: …Exception: No signature of method: groovytest.println() is applicable for argument types: (java.lang.Integer, java.lang.Integer)…
#!/usr/bin/env groovy // Filename: groovytest println 0,0
Groovy scripts can be compiled to java class files with groovyc
. In order to run those classes with the normal java
command, you either have to include /usr/local/groovy/embeddable/goovy-all-1.6.5.jar
to the CLASSPATH
variable or better 1) make a symlink in the Java Installed Extensions directory:
cd /usr/lib/java/jre/lib/ext ln -s /usr/local/groovy/embeddable/goovy-all-1.6.5.jar
Note that this would have to be done on every system which wants to run a compiled script. Therefore it is better to create a jar file wich already includes the necessary depcendencies. This is described here.
Add Groovy specific infos about Java Web Start here.
See also generic Java Web Start
Add Groovy specific infos about Pivot here. http://www.ibm.com/developerworks/xml/tutorials/x-pivottut/
See also generic Apache Pivot
Add Groovy / Pivot specific infos about Java Web Start here.
def
is a replacement for a type name e.g. in method signatures. It is used to indicate that you don't care about the type. You can omit def
in global variables of a script:
def seven=7; println "seven.class: "+ seven.class // -> class java.lang.Integer int eight=8; println "eight.class: "+ eight.class // -> class java.lang.Integer nine=9; println "nine.class: " + nine.class // -> class java.lang.Integer seven="seven"; println "seven.class: "+ seven.class // -> class java.lang.String //eight="eight"; println "eight.class: "+ eight.class // GroovyCastException!!! nine="nine"; println "nine.class: " + nine.class // -> class java.lang.String
#!/usr/bin/env groovy myList = [1976, 1969] // create a list myList << 2010 // append something to the end println myList // => [1976, 1969, 2010] println myList[2] // => 2010 println myList[3] // => null println myList.size // => 3
Iterate over the list by calling the each()
method on the list and pass in a closure:
myList.each{ print "$it " } // => 1976 1969 2010 myList.eachWithIndex{ v, k -> print "$k:$v " } // => 0:1976 1:1969 2:2010
Each list creates an implementation of java.util.List. Hence the complete API of List is available:
println myList.class // => class java.util.ArrayList println myList.get(0) // => 1976 println myList.size() // => 2
More on lists: usage examples, added methods to the standard List interface, Reaching for each
myMap = ["Sandy":1976, "Becki":1969] println myMap.Sandy // => 1976 println myMap.get("Sandy") // => 1976 println myMap.class // => null (default getter is overwritten !!!) println myMap.getClass() // => class java.util.LinkedHashMap myMap.Junior="2010?" // Add a new value myMap.each{ print "$it " } // => Sandy=1976 Becki=1969 Junior=2010? myMap.each{ print "$it.key=$it.value "} // => Sandy=1976 Becki=1969 Junior=2010? myMap.each{ k, v -> print "$k=$v " } // => Sandy=1976 Becki=1969 Junior=2010?
More on maps: Reaching for each, Maps
.sort()
is a method added to Collection by Groovyeach
def
is used for dynamically typed variables. See Scoping+and+the+Semantics+of+"def" → What is this „def“ I heard of?