Benutzer-Werkzeuge

Webseiten-Werkzeuge


becki:linux:groovy

Groovy

Getting Help

Install

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"

Tools

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)

Script Files

Shebang

#!/usr/bin/env groovy
println "Hallo Sandy!"

Command Line Arguments

// 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

Stdin stdout stderr

FIXME System.in.text

Behind the Scenes

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

Compile Groovy Scripts

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.

Java Web Start

FIXME Add Groovy specific infos about Java Web Start here.

See also generic Java Web Start

Apache Pivot

FIXME Add Groovy specific infos about Pivot here. http://www.ibm.com/developerworks/xml/tutorials/x-pivottut/

See also generic Apache Pivot

Java Web Start

FIXME Add Groovy / Pivot specific infos about Java Web Start here.

See also general pivot specific things about Java Web Start

Dynamic Typing

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

Collections: Lists, Ranges and Maps

Lists

#!/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

Maps

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

Unsorted

Open Questions / To do

1)
to be tested!
Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website. Weitere Information
becki/linux/groovy.txt · Zuletzt geändert: 2010-03-15 09:57 von becki

Impressum - Datenschutzerklärung