Upload
thorsten-kamann
View
1.351
Download
1
Embed Size (px)
DESCRIPTION
In dem in Kürze zu erwartenden Java 6 ist der Support für dynamische Scriptsprachen enthalten. Mit Groovy ist eine Scriptsprache entwickelt worden, die die Vorteile einer Scriptsprache und einer mächtigen Sprache wie Java verbindet. In diesem Vortrag stelle ich Grovvy und die verschiedenen Subprojekte vor und diskutiere die möglichen Anwendungsfälle. Dieser Vortrag findet im Rahmen des Dortmunder Kreises statt.
Citation preview
Copyright 2006 Thorsten Kamann
von und mit Thorsten Kamann
Copyright 2006 Thorsten Kamann
EinleitungEinleitungGetting StartedGetting StartedEmbeddingEmbeddingDie SyntaxDie SyntaxGroovy Highlights Groovy Highlights
XML-Processing, Markup, GPath, Groovy Beans, RegEX...XML-Processing, Markup, GPath, Groovy Beans, RegEX...ModuleModule
Grails, Gorm, Scriptom...Grails, Gorm, Scriptom...TestingTestingIDE-SupportIDE-SupportZusammenfassung/LinksZusammenfassung/Links
Copyright 2006 Thorsten Kamann
Einle itung
Copyright 2006 Thorsten Kamann
Was ist Scripting?Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sindkleine, überschaubare Programmieraufgaben gedacht sind
Copyright 2006 Thorsten Kamann
Was ist Scripting?Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sindkleine, überschaubare Programmieraufgaben gedacht sind
Kein Deklarationszwang für VariablenKein Deklarationszwang für Variablen
Copyright 2006 Thorsten Kamann
Was ist Scripting?Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sindkleine, überschaubare Programmieraufgaben gedacht sind
Kein Deklarationszwang für VariablenKein Deklarationszwang für Variablenautomatische Speicherverwaltungautomatische Speicherverwaltung
Copyright 2006 Thorsten Kamann
Was ist Scripting?Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sindkleine, überschaubare Programmieraufgaben gedacht sind
Kein Deklarationszwang für VariablenKein Deklarationszwang für Variablenautomatische Speicherverwaltungautomatische Speicherverwaltungwerden in der Regel ohne getrennte Übersetzungsphase werden in der Regel ohne getrennte Übersetzungsphase
ausgeführt (d. h. sie werden „interpretiert“)ausgeführt (d. h. sie werden „interpretiert“)
Copyright 2006 Thorsten Kamann
Was ist Groovy?Was ist Groovy?
Eine dynamische SpracheEine dynamische Sprache
Copyright 2006 Thorsten Kamann
Was ist Groovy?Was ist Groovy?
Eine dynamische SpracheEine dynamische SpracheInspiriert von Ruby, Python, SmalltalkInspiriert von Ruby, Python, Smalltalk
Copyright 2006 Thorsten Kamann
Was ist Groovy?Was ist Groovy?
Eine dynamische SpracheEine dynamische SpracheInspiriert von Ruby, Python, SmalltalkInspiriert von Ruby, Python, SmalltalkEntwickelt für die Java-PlattformEntwickelt für die Java-Plattform
Copyright 2006 Thorsten Kamann
Was ist Groovy?Was ist Groovy?
Eine dynamische SpracheEine dynamische SpracheInspiriert von Ruby, Python, SmalltalkInspiriert von Ruby, Python, SmalltalkEntwickelt für die Java-PlattformEntwickelt für die Java-Plattform
Um sie Java-Entwicklern zugänglich zu machenUm sie Java-Entwicklern zugänglich zu machen
Copyright 2006 Thorsten Kamann
Was ist Groovy?Was ist Groovy?
Eine dynamische SpracheEine dynamische SpracheInspiriert von Ruby, Python, SmalltalkInspiriert von Ruby, Python, SmalltalkEntwickelt für die Java-PlattformEntwickelt für die Java-Plattform
Um sie Java-Entwicklern zugänglich zu machenUm sie Java-Entwicklern zugänglich zu machenUm möglichst viel der Java-Syntax wieder verwenden zu Um möglichst viel der Java-Syntax wieder verwenden zu
könnenkönnen
Copyright 2006 Thorsten Kamann
Was ist Groovy?Was ist Groovy?
Eine dynamische SpracheEine dynamische SpracheInspiriert von Ruby, Python, SmalltalkInspiriert von Ruby, Python, SmalltalkEntwickelt für die Java-PlattformEntwickelt für die Java-Plattform
Um sie Java-Entwicklern zugänglich zu machenUm sie Java-Entwicklern zugänglich zu machenUm möglichst viel der Java-Syntax wieder verwenden zu Um möglichst viel der Java-Syntax wieder verwenden zu
könnenkönnenUm eine einfache Anbindung zu Enterprise-Systemen Um eine einfache Anbindung zu Enterprise-Systemen
anzubietenanzubieten
Copyright 2006 Thorsten Kamann
Was ist Groovy?Was ist Groovy?
Eine dynamische SpracheEine dynamische SpracheInspiriert von Ruby, Python, SmalltalkInspiriert von Ruby, Python, SmalltalkEntwickelt für die Java-PlattformEntwickelt für die Java-Plattform
Um sie Java-Entwicklern zugänglich zu machenUm sie Java-Entwicklern zugänglich zu machenUm möglichst viel der Java-Syntax wieder verwenden zu Um möglichst viel der Java-Syntax wieder verwenden zu
könnenkönnenUm eine einfache Anbindung zu Enterprise-Systemen Um eine einfache Anbindung zu Enterprise-Systemen
anzubietenanzubietenDas Ergebnis des JSR 241: Das Ergebnis des JSR 241: The Groovy Programming Language
Copyright 2006 Thorsten Kamann
GettingS ta rted
Copyright 2006 Thorsten Kamann
Getting StartedGetting Started
Download des aktuellen Release von Download des aktuellen Release von http://groovy.codehaus.orghttp://groovy.codehaus.org
Copyright 2006 Thorsten Kamann
Getting StartedGetting Started
Download des aktuellen Release von Download des aktuellen Release von http://groovy.codehaus.orghttp://groovy.codehaus.org
Entpacken des ArchivsEntpacken des Archivs
Copyright 2006 Thorsten Kamann
Getting StartedGetting Started
Download des aktuellen Release von Download des aktuellen Release von http://groovy.codehaus.orghttp://groovy.codehaus.org
Entpacken des ArchivsEntpacken des ArchivsSetzen der Umgebungsvariable Setzen der Umgebungsvariable GROOVY_HOME
Copyright 2006 Thorsten Kamann
Getting StartedGetting Started
Download des aktuellen Release von Download des aktuellen Release von http://groovy.codehaus.orghttp://groovy.codehaus.org
Entpacken des ArchivsEntpacken des ArchivsSetzen der Umgebungsvariable Setzen der Umgebungsvariable GROOVY_HOMEHinzufügen von Hinzufügen von %GROOVY_HOME%\bin zur zur PATH-Variable-Variable
Copyright 2006 Thorsten Kamann
Getting StartedGetting Started
Download des aktuellen Release von Download des aktuellen Release von http://groovy.codehaus.orghttp://groovy.codehaus.org
Entpacken des ArchivsEntpacken des ArchivsSetzen der Umgebungsvariable Setzen der Umgebungsvariable GROOVY_HOMEHinzufügen von Hinzufügen von %GROOVY_HOME%\bin zur zur PATH-Variable-VariableStarten von Starten von groovyConsole und Eingabe von und Eingabe von
println „Hallo Welt“ mit anschliessendem mit anschliessendem STRG-R
Copyright 2006 Thorsten Kamann
Getting StartedGetting Started
Copyright 2006 Thorsten Kamann
Embedding
Copyright 2006 Thorsten Kamann
EmbeddingEmbedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werdeneingebunden werden
Copyright 2006 Thorsten Kamann
EmbeddingEmbedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werdeneingebunden werden
Copyright 2006 Thorsten Kamann
EmbeddingEmbedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werdeneingebunden werden
Copyright 2006 Thorsten Kamann
EmbeddingEmbedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werdeneingebunden werden
Copyright 2006 Thorsten Kamann
EmbeddingEmbedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werdeneingebunden werden
Copyright 2006 Thorsten Kamann
Embedding mit dem BSFEmbedding mit dem BSF
Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache in Java-Anwendungen einzubindenin Java-Anwendungen einzubinden
Copyright 2006 Thorsten Kamann
Embedding mit dem BSFEmbedding mit dem BSF
Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache in Java-Anwendungen einzubindenin Java-Anwendungen einzubinden
Groovy bietet aber leichtgewichtigere und leistungsfähigere Groovy bietet aber leichtgewichtigere und leistungsfähigere Möglichkeiten der EinbindungMöglichkeiten der Einbindung
Copyright 2006 Thorsten Kamann
Embedding mit GroovyShellEmbedding mit GroovyShell
GroovyShell bietet die Möglichkeit des Ein- und Auslesens GroovyShell bietet die Möglichkeit des Ein- und Auslesens von Variablen mittels des von Variablen mittels des Binding-Objekts-Objekts
Copyright 2006 Thorsten Kamann
Embedding mit GroovyShellEmbedding mit GroovyShell
GroovyShell bietet die Möglichkeit des Ein- und Auslesens GroovyShell bietet die Möglichkeit des Ein- und Auslesens von Variablen mittels des von Variablen mittels des Binding-Objekts-Objekts
Binding binding = new Binding();binding.setVariable("foo", new Integer(2));GroovyShell shell = new GroovyShell(binding);Object value = shell.evaluate( "println 'Hello World!'; x = 123; return foo * 10");assert value.equals(new Integer(20));assert binding.getVariable("x").equals(new Integer(123));
Copyright 2006 Thorsten Kamann
Embedding mit GroovyClassLoaderEmbedding mit GroovyClassLoader
Der GroovyClassLoader lädt Groovy-Klassen dynamisch und Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methodenermöglicht den direkten Zugriff auf deren Methoden
Copyright 2006 Thorsten Kamann
Embedding mit GroovyClassLoaderEmbedding mit GroovyClassLoader
Der GroovyClassLoader lädt Groovy-Klassen dynamisch und Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methodenermöglicht den direkten Zugriff auf deren Methoden
ClassLoader parent = getClass().getClassLoader();GroovyClassLoader loader = new GroovyClassLoader(parent);Class groovyClass = loader.parseClass(
new File("script.groovy"));GroovyObject groovyObject =
(GroovyObject) groovyClass.newInstance();Object[] args = {};groovyObject.invokeMethod("run", args);
Copyright 2006 Thorsten Kamann
Embedding mit GroovyClassLoaderEmbedding mit GroovyClassLoader
Der GroovyClassLoader lädt Groovy-Klassen dynamisch und Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methodenermöglicht den direkten Zugriff auf deren Methoden
GroovyClassLoader gcl = new GroovyClassLoader();Class clazz = gcl.parseClass(
myStringwithGroovyClassSource, "SomeName.groovy");Object aScript = clazz.newInstance();MyInterface myObject = (MyInterface) aScript;myObject.interfaceMethod();
Copyright 2006 Thorsten Kamann
Embedding mit GroovyScriptEngineEmbedding mit GroovyScriptEngine
Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte auszuführen. Das Binding-Objekt befüllt dabei die Skripte auszuführen. Das Binding-Objekt befüllt dabei die Skripte mit Datenmit Daten
Copyright 2006 Thorsten Kamann
Embedding mit GroovyScriptEngineEmbedding mit GroovyScriptEngine
Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte auszuführen. Das Binding-Objekt befüllt dabei die Skripte auszuführen. Das Binding-Objekt befüllt dabei die Skripte mit Datenmit Daten
String[] roots = new String[] {"/my/groovy/script/path"};GroovyScriptEngine gse = new GroovyScriptEngine(roots);Binding binding = new Binding();binding.setVariable("input", "world");gse.run("hello.groovy", binding);System.out.println(binding.getVariable("output"));
Copyright 2006 Thorsten Kamann
Embedding mit AntEmbedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-ANT-Task, mit dem eine beliebige Anzahl von Groovy-Skripten ausgeführt werden könnenSkripten ausgeführt werden können
Copyright 2006 Thorsten Kamann
Embedding mit AntEmbedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-ANT-Task, mit dem eine beliebige Anzahl von Groovy-Skripten ausgeführt werden könnenSkripten ausgeführt werden können
GroovyC-Task, der Groovy-Skripte (Klassen) zu Java GroovyC-Task, der Groovy-Skripte (Klassen) zu Java Bytecode kompiliertBytecode kompiliert
Copyright 2006 Thorsten Kamann
Embedding mit AntEmbedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-ANT-Task, mit dem eine beliebige Anzahl von Groovy-Skripten ausgeführt werden könnenSkripten ausgeführt werden können
GroovyC-Task, der Groovy-Skripte (Klassen) zu Java GroovyC-Task, der Groovy-Skripte (Klassen) zu Java Bytecode kompiliertBytecode kompiliert
Erstellen von Ant-Tasks mit Groovy und dem Markup-BuilderErstellen von Ant-Tasks mit Groovy und dem Markup-Builder
Copyright 2006 Thorsten Kamann
Embedding mit AntEmbedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-ANT-Task, mit dem eine beliebige Anzahl von Groovy-Skripten ausgeführt werden könnenSkripten ausgeführt werden können
GroovyC-Task, der Groovy-Skripte (Klassen) zu Java GroovyC-Task, der Groovy-Skripte (Klassen) zu Java Bytecode kompiliertBytecode kompiliert
Erstellen von Ant-Tasks mit Groovy und dem Markup-BuilderErstellen von Ant-Tasks mit Groovy und dem Markup-BuilderErzeugen von Ant-SkriptenErzeugen von Ant-Skripten
Copyright 2006 Thorsten Kamann
Embedding mit Maven 2Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstütztunterstützt
Copyright 2006 Thorsten Kamann
Embedding mit Maven 2Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstütztunterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden könnenbeliebige Groovy-Skripte ausgeführt werden können
Copyright 2006 Thorsten Kamann
Embedding mit Maven 2Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstütztunterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden könnenbeliebige Groovy-Skripte ausgeführt werden können
In der Sandbox von In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung existieren bereits Maven-Tools für direkte Unterstützung von Groovyvon Groovy
Copyright 2006 Thorsten Kamann
Embedding mit Maven 2Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstütztunterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden könnenbeliebige Groovy-Skripte ausgeführt werden können
In der Sandbox von In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung existieren bereits Maven-Tools für direkte Unterstützung von Groovyvon GroovyGroovy-CompilerGroovy-Compiler
Copyright 2006 Thorsten Kamann
Embedding mit Maven 2Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstütztunterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden könnenbeliebige Groovy-Skripte ausgeführt werden können
In der Sandbox von In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung existieren bereits Maven-Tools für direkte Unterstützung von Groovyvon GroovyGroovy-CompilerGroovy-CompilerGroovy-ArchetypeGroovy-Archetype
Copyright 2006 Thorsten Kamann
Embedding mit Maven 2Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstütztunterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden könnenbeliebige Groovy-Skripte ausgeführt werden können
In der Sandbox von In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung existieren bereits Maven-Tools für direkte Unterstützung von Groovyvon GroovyGroovy-CompilerGroovy-CompilerGroovy-ArchetypeGroovy-ArchetypeTools, um Maven-Plugins mit Groovy zu entwickelnTools, um Maven-Plugins mit Groovy zu entwickeln
Copyright 2006 Thorsten Kamann
Embedding in WindowsEmbedding in Windows
Groovy kann direkt von der Eingabeaufforderung oder über Groovy kann direkt von der Eingabeaufforderung oder über Start-->Ausführen mittels mittels
groovy script.groovy [arguments]ausgeführt werdenausgeführt werden
Copyright 2006 Thorsten Kamann
Embedding in WindowsEmbedding in Windows
Groovy kann direkt von der Eingabeaufforderung oder über Groovy kann direkt von der Eingabeaufforderung oder über Start-->Ausführen mittels mittels
groovy script.groovy [arguments]ausgeführt werdenausgeführt werden
Alternativ kann über den Dialog Alternativ kann über den Dialog Ordneroptionen-->Dateitypen die Extension die Extension *.groovy an an groovy.bat gebunden werden. gebunden werden.
Copyright 2006 Thorsten Kamann
Embedding in LinuxEmbedding in Linux
Groovy kann direkt von der Konsole mittelsGroovy kann direkt von der Konsole mittelsgroovy script.groovy [arguments]
ausgeführt werdenausgeführt werden
Copyright 2006 Thorsten Kamann
Embedding in LinuxEmbedding in Linux
Groovy kann direkt von der Konsole mittelsGroovy kann direkt von der Konsole mittelsgroovy script.groovy [arguments]
ausgeführt werdenausgeführt werdenAlternativ kann in die 1. Zeile eines Groovy-Skripts Alternativ kann in die 1. Zeile eines Groovy-Skripts
#!/usr/bin/env groovyeingefügt werden. So kann miteingefügt werden. So kann mit
chmod +x script.groovy./script.groovy
das Skript ausgeführt werdendas Skript ausgeführt werden
Copyright 2006 Thorsten Kamann
DieSyntax
Copyright 2006 Thorsten Kamann
Die Syntax: ClosuresDie Syntax: Closures
Closures Closures sind anonyme Codeblöckesind anonyme Codeblöcke
Copyright 2006 Thorsten Kamann
Die Syntax: ClosuresDie Syntax: Closures
Closures Closures sind anonyme Codeblöckesind anonyme Codeblöckegeben einen Wert zurückgeben einen Wert zurück
Copyright 2006 Thorsten Kamann
Die Syntax: ClosuresDie Syntax: Closures
Closures Closures sind anonyme Codeblöckesind anonyme Codeblöckegeben einen Wert zurückgeben einen Wert zurückreferenzieren und verwenden Variablen referenzieren und verwenden Variablen
Copyright 2006 Thorsten Kamann
Die Syntax: ClosuresDie Syntax: Closures
Closures Closures sind anonyme Codeblöckesind anonyme Codeblöckegeben einen Wert zurückgeben einen Wert zurückreferenzieren und verwenden Variablen referenzieren und verwenden Variablen werden oft wie Anonyme Inner Classes in Java benutztwerden oft wie Anonyme Inner Classes in Java benutzt
Copyright 2006 Thorsten Kamann
Die Syntax: ClosuresDie Syntax: Closures
Closures Closures sind anonyme Codeblöckesind anonyme Codeblöckegeben einen Wert zurückgeben einen Wert zurückreferenzieren und verwenden Variablen referenzieren und verwenden Variablen werden oft wie Anonyme Inner Classes in Java benutztwerden oft wie Anonyme Inner Classes in Java benutztwerden erst ausgeführt, wenn call() auf der Closure werden erst ausgeführt, wenn call() auf der Closure
aufgerufen wirdaufgerufen wird
Copyright 2006 Thorsten Kamann
Die Syntax: ClosuresDie Syntax: Closures
Closures Closures sind anonyme Codeblöckesind anonyme Codeblöckegeben einen Wert zurückgeben einen Wert zurückreferenzieren und verwenden Variablen referenzieren und verwenden Variablen werden oft wie Anonyme Inner Classes in Java benutztwerden oft wie Anonyme Inner Classes in Java benutztwerden erst ausgeführt, wenn call() auf der Closure werden erst ausgeführt, wenn call() auf der Closure
aufgerufen wirdaufgerufen wirdkönnen an eine Variable gebunden werdenkönnen an eine Variable gebunden werden
Copyright 2006 Thorsten Kamann
Die Syntax: Closures (Beispiele)Die Syntax: Closures (Beispiele)
Beispiele:Beispiele:
{ item++ }
Copyright 2006 Thorsten Kamann
Die Syntax: Closures (Beispiele)Die Syntax: Closures (Beispiele)
Beispiele:Beispiele:
{ name -> println name }
Copyright 2006 Thorsten Kamann
Die Syntax: Closures (Beispiele)Die Syntax: Closures (Beispiele)
Beispiele:Beispiele:
{String x, int y -> println "hey $x the value is $y"}
Copyright 2006 Thorsten Kamann
Die Syntax: Closures (Beispiele)Die Syntax: Closures (Beispiele)
Beispiele:Beispiele:
{ reader ->while (true) {
line = reader.readLine() }}
Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Listen)Die Syntax – Collections (Listen)
Listen erzeugen immer eine Instanz von java.util.ListListen erzeugen immer eine Instanz von java.util.List
Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Listen)Die Syntax – Collections (Listen)
Listen erzeugen immer eine Instanz von java.util.ListListen erzeugen immer eine Instanz von java.util.List
def list = [5, 6, 7, 8]assert list.get(2) == 7assert list instanceof java.util.List
Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Listen)Die Syntax – Collections (Listen)
Listen erzeugen immer eine Instanz von java.util.ListListen erzeugen immer eine Instanz von java.util.List
def emptyList = []assert emptyList.size() == 0emptyList.add(5)assert emptyList.size() == 1
Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Ranges)Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen WertenRanges erzeugen Listen mit sequentiellen Werten
Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Ranges)Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen WertenRanges erzeugen Listen mit sequentiellen WertenEs gibt inklusive und exklusive RangesEs gibt inklusive und exklusive Ranges
Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Ranges)Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen WertenRanges erzeugen Listen mit sequentiellen WertenEs gibt inklusive und exklusive RangesEs gibt inklusive und exklusive Ranges
def range = 5..8assert range.contains(6)assert range.contains(8)
Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Ranges)Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen WertenRanges erzeugen Listen mit sequentiellen WertenEs gibt inklusive und exklusive RangesEs gibt inklusive und exklusive Ranges
def range = 5..<8assert range.contains(6)assert !range.contains(8)
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Maps)Die Syntax: Collections (Maps)
Maps basieren auf einer Implementierung von java.util.MapMaps basieren auf einer Implementierung von java.util.Map
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Maps)Die Syntax: Collections (Maps)
Maps basieren auf einer Implementierung von java.util.MapMaps basieren auf einer Implementierung von java.util.Map
def map = [name:"Gromit", likes:"cheese", id:1234]assert map.get("name") == "Gromit"assert map["name"] == "Gromit"
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Maps)Die Syntax: Collections (Maps)
Maps basieren auf einer Implementierung von java.util.MapMaps basieren auf einer Implementierung von java.util.Map
def emptyMap = [:]emptyMap.foo = 5assert emptyMap.foo == 5
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Expando)Die Syntax: Collections (Expando)
Expandos ermöglichen die Erzeugung von dynamischen Expandos ermöglichen die Erzeugung von dynamischen ObjektenObjekten
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Expando)Die Syntax: Collections (Expando)
Expandos ermöglichen die Erzeugung von dynamischen Expandos ermöglichen die Erzeugung von dynamischen ObjektenObjekten
def player = new Expando()player.name = "Peter"player.greeting = { "Hello, my name is $player.name" }assert player.greeting() == "Hello, my name is Peter"
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (each)Die Syntax: Collections (each)
Iterator mittels einer ClosureIterator mittels einer Closure
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (each)Die Syntax: Collections (each)
Iterator mittels einer ClosureIterator mittels einer Closure
[1, 2, 3].each { item -> print "${item}-" }
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (collect)Die Syntax: Collections (collect)
Erzeugt eine neue Liste mit dem Ergebnis der ClosureErzeugt eine neue Liste mit dem Ergebnis der Closure
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (collect)Die Syntax: Collections (collect)
Erzeugt eine neue Liste mit dem Ergebnis der ClosureErzeugt eine neue Liste mit dem Ergebnis der Closure
def value = [1, 2, 3].collect { it * 2 }assert value == [2, 4, 6]
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (find)Die Syntax: Collections (find)
Gibt das erste Element einer Collection zurück, welches der Gibt das erste Element einer Collection zurück, welches der Expression in der Closure entsprichtExpression in der Closure entspricht
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (find)Die Syntax: Collections (find)
Gibt das erste Element einer Collection zurück, welches der Gibt das erste Element einer Collection zurück, welches der Expression in der Closure entsprichtExpression in der Closure entspricht
def value = [1, 2, 3].find { it > 1 }assert value == 2
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (findAll)Die Syntax: Collections (findAll)
Gibt eine Collection mit allen Elementen, die denen der Gibt eine Collection mit allen Elementen, die denen der Expression in der Closure entsprechen, zurückExpression in der Closure entsprechen, zurück
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (findAll)Die Syntax: Collections (findAll)
Gibt eine Collection mit allen Elementen, die denen der Gibt eine Collection mit allen Elementen, die denen der Expression in der Closure entsprechen, zurückExpression in der Closure entsprechen, zurück
def value = [1, 2, 3].findAll { it > 1 }assert value == [2, 3]
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (inject)Die Syntax: Collections (inject)
Fügt einen zusätzlichen Wert zu einer Iteration hinzuFügt einen zusätzlichen Wert zu einer Iteration hinzu
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (inject)Die Syntax: Collections (inject)
Fügt einen zusätzlichen Wert zu einer Iteration hinzuFügt einen zusätzlichen Wert zu einer Iteration hinzu
def value = ["Java", "C#", "C++", "VB"].inject("Languages: "){str, item -> str+" "+item}
assert value == „Languages: Java C# C++ VB“
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (every)Die Syntax: Collections (every)
Gibt Gibt true zurück, wenn alle Werte in der Collection der zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechenExpression in der Closure entsprechen
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (every)Die Syntax: Collections (every)
Gibt Gibt true zurück, wenn alle Werte in der Collection der zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechenExpression in der Closure entsprechen
def value = [1, 2, 3].every { it < 5 }assert value
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (every)Die Syntax: Collections (every)
Gibt Gibt true zurück, wenn alle Werte in der Collection der zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechenExpression in der Closure entsprechen
def value = [1, 2, 3].every { item -> item < 3 }assert !value
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (any)Die Syntax: Collections (any)
Gibt Gibt true zurück, wenn mindestens ein Wert in der zurück, wenn mindestens ein Wert in der Collection der Expression in der Closure entsprichtCollection der Expression in der Closure entspricht
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (any)Die Syntax: Collections (any)
Gibt Gibt true zurück, wenn mindestens ein Wert in der zurück, wenn mindestens ein Wert in der Collection der Expression in der Closure entsprichtCollection der Expression in der Closure entspricht
def value = [1, 2, 3].any { item -> item > 3 }assert value == false
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (any)Die Syntax: Collections (any)
Gibt Gibt true zurück, wenn mindestens ein Wert in der zurück, wenn mindestens ein Wert in der Collection der Expression in der Closure entsprichtCollection der Expression in der Closure entspricht
def value = [1, 2, 3].any { it > 2 }assert value
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (max/min)Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Objekte in dieser Collection müssen Comparable sein sein
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (max/min)Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Objekte in dieser Collection müssen Comparable sein sein
def value = [9, 4, 2, 10, 5].max()assert value == 10
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (max/min)Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Objekte in dieser Collection müssen Comparable sein sein
def value = [9, 4, 2, 10, 5].min()assert value == 2
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (max/min)Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Objekte in dieser Collection müssen Comparable sein sein
def value = ['x', 'y', 'a', 'z'].min()assert value == 'a'
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (join)Die Syntax: Collections (join)
Fügt einen Fügt einen String zu den Werten einer Collection hinzu zu den Werten einer Collection hinzu
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (join)Die Syntax: Collections (join)
Fügt einen Fügt einen String zu den Werten einer Collection hinzu zu den Werten einer Collection hinzu
def value = [1, 2, 3].join('-')assert value == '1-2-3'
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Beispiele)Die Syntax: Collections (Beispiele)
Ranges verwenden, um Teile von Listen zu extrahierenRanges verwenden, um Teile von Listen zu extrahieren
def list = 100..200def sub = list[1, 3, 20..25, 33]assert sub == [101, 103, 120, 121, 122, 123, 124, 125, 133]
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Beispiele)Die Syntax: Collections (Beispiele)
Rückwärts gerichtete RangesRückwärts gerichtete Ranges
def text = "nice cheese gromit!"def name = text[3..1]assert name == "eci"
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Beispiele)Die Syntax: Collections (Beispiele)
Negative Ranges – Index beginnt beim letzten ZeichenNegative Ranges – Index beginnt beim letzten Zeichen
def text = "nice cheese gromit!"def x = text[-1]assert x == "!"
Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Beispiele)Die Syntax: Collections (Beispiele)
Negative Ranges – Index beginnt beim letzten ZeichenNegative Ranges – Index beginnt beim letzten Zeichen
def text = "nice cheese gromit!"def name = text[-7..-2]assert name == "gromit"
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (while)Die Syntax: Looping (while)
Groovy unterstützt das aus Java bekannte while{..} Groovy unterstützt das aus Java bekannte while{..} KonstruktKonstrukt
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (while)Die Syntax: Looping (while)
Groovy unterstützt das aus Java bekannte while{..} Groovy unterstützt das aus Java bekannte while{..} KonstruktKonstrukt
def x = 0def y = 5while ( y-- > 0 ) { x++}assert x == 5
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (for)Die Syntax: Looping (for)
Die for-Schleife ist einfacher und arbeitet mit Arrays und Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections Collections
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (for)Die Syntax: Looping (for)
Die for-Schleife ist einfacher und arbeitet mit Arrays und Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections Collections
def x = 0for ( i in 0..9 ) { x += i}assert x == 45
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (for)Die Syntax: Looping (for)
Die for-Schleife ist einfacher und arbeitet mit Arrays und Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections Collections
x = 0for ( i in [0, 1, 2, 3, 4] ) { x += i}assert x == 10
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (each)Die Syntax: Looping (each)
each ist eine Closure. Dadurch ist eine sehr kompakte ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglichAbarbeitung von Schleifen möglich
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (each)Die Syntax: Looping (each)
each ist eine Closure. Dadurch ist eine sehr kompakte ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglichAbarbeitung von Schleifen möglich
def stringList = ["java", "python", "ruby", "c#", "groovy"]stringList.each() { print " ${it}" }; // java python ruby c# groovy
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (each)Die Syntax: Looping (each)
each ist eine Closure. Dadurch ist eine sehr kompakte ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglichAbarbeitung von Schleifen möglich
def stringMap = ["Su" : "Sunday", "Mo" : "Monday"]stringMap.each() { key, value ->
println "${key} == ${value}" };// Su == Sunday// Mo == Monday
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (eachWithIndex)Die Syntax: Looping (eachWithIndex)
Unterscheidet sich vom Looping mit Unterscheidet sich vom Looping mit each dadurch, dass ein dadurch, dass ein Index mitgeführt wirdIndex mitgeführt wird
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (eachWithIndex)Die Syntax: Looping (eachWithIndex)
Unterscheidet sich vom Looping mit Unterscheidet sich vom Looping mit each dadurch, dass ein dadurch, dass ein Index mitgeführt wirdIndex mitgeführt wird
def stringList = ["java", "python", "ruby", "c#", "groovy"]stringList.eachWithIndex() {
obj, i -> println " ${i}: ${obj}" }; // 0: java 1: python 2: ruby 3: c# 4: groovy
Copyright 2006 Thorsten Kamann
Die Syntax: Looping (eachWithIndex)Die Syntax: Looping (eachWithIndex)
Unterscheidet sich vom Looping mit Unterscheidet sich vom Looping mit each dadurch, dass ein dadurch, dass ein Index mitgeführt wirdIndex mitgeführt wird
def stringMap = ["Su" : "Sunday", "Mo" : "Monday"]stringMap.eachWithIndex() {
obj, i -> println " ${i}: ${obj}" };// 0: Su=Sunday// 1: Mo=Monday
Copyright 2006 Thorsten Kamann
Die Syntax: Conditions (if...else)Die Syntax: Conditions (if...else)
Groovy unterstützt die aus Java bekannten Groovy unterstützt die aus Java bekannten if...else KonstrukteKonstrukte
Copyright 2006 Thorsten Kamann
Die Syntax: Conditions (if...else)Die Syntax: Conditions (if...else)
Groovy unterstützt die aus Java bekannten Groovy unterstützt die aus Java bekannten if...else KonstrukteKonstrukte
def x = (y > 1) ? "worked" : "failed"if (x){
...}else{
...}
Copyright 2006 Thorsten Kamann
Die Syntax: Conditions (switch)Die Syntax: Conditions (switch)
Das Das switch-Statement unterstützt Klassenvergleiche, -Statement unterstützt Klassenvergleiche, Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke und und equals Vergleiche Vergleiche
Copyright 2006 Thorsten Kamann
Die Syntax: Conditions (switch)Die Syntax: Conditions (switch)
Das Das switch-Statement unterstützt Klassenvergleiche, -Statement unterstützt Klassenvergleiche, Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke und und equals Vergleiche Vergleiche
switch ( x ) {case („foo“): ...case (20..30): ...case (Integer): ...default: ...
}
Copyright 2006 Thorsten Kamann
XMLProc es s ing
Copyright 2006 Thorsten Kamann
XML-ProcessingXML-Processing
Groovy bietet reichhaltige Unterstützung für das XML-Groovy bietet reichhaltige Unterstützung für das XML-ProcessingProcessing
Copyright 2006 Thorsten Kamann
XML-ProcessingXML-Processing
Copyright 2006 Thorsten Kamann
XML-ProcessingXML-Processing
Copyright 2006 Thorsten Kamann
XML-ProcessingXML-Processing
Copyright 2006 Thorsten Kamann
XML-ProcessingXML-Processing
Copyright 2006 Thorsten Kamann
XML-ProcessingXML-Processing
Groovy bietet reichhaltige Unterstützung für das XML-Groovy bietet reichhaltige Unterstützung für das XML-ProcessingProcessing
Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im XML-DokumentXML-Dokument
Copyright 2006 Thorsten Kamann
XML-ProcessingXML-Processing
Groovy bietet reichhaltige Unterstützung für das XML-Groovy bietet reichhaltige Unterstützung für das XML-ProcessingProcessing
Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im XML-DokumentXML-Dokument
DOMCategory stellt mächtige Navigationselemente zur DOMCategory stellt mächtige Navigationselemente zur VerfügungVerfügung
Copyright 2006 Thorsten Kamann
XML-ProcessingXML-ProcessingDOM Klasse Methode Beschreibung
Element .'child' .getElementsByTagName('child') Element .child .getElementsByTagName('child') Element .'*' .getElementsByTagName('*') Element .'@attr' .getAttribute('attr') Element .text() .firstChild.nodeValue Element .name() .nodeName Element .parent() .parentNode Element .children() .childNodes NodeList .size() .length NodeList .list()NodeList [n] .item(n) NodeList .text() .collect{ it.text() } NodeList .child .getElementsByTagName('child')
Copyright 2006 Thorsten Kamann
XML-Processing mit XML-ParserXML-Processing mit XML-Parserdef records = new XmlParser().parseText(XmlExamples.CAR_RECORDS)
def allRecords = records.car.size()assert allRecords == 3
def allNodes = records.depthFirst().size()assert allNodes == 10
Copyright 2006 Thorsten Kamann
XML-Processing mit DOMCategoryXML-Processing mit DOMCategorydef reader = new StringReader(XmlExamples.CAR_RECORDS)def doc = DOMBuilder.parse(reader)def records = doc.documentElement
use (DOMCategory) { assert 9 == records.'*'.size() def cars = records.'car' assert cars[0].parent() == records assert 3 == cars.size()}
Copyright 2006 Thorsten Kamann
GroovyMarkup
Copyright 2006 Thorsten Kamann
GroovyMarkupGroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-Groovy bietet Unterstützung für die Arbeit mit Markup-Languages:Languages:XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI'sXML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's
Copyright 2006 Thorsten Kamann
GroovyMarkupGroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-Groovy bietet Unterstützung für die Arbeit mit Markup-Languages:Languages:XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI'sXML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's
Copyright 2006 Thorsten Kamann
GroovyMarkupGroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-Groovy bietet Unterstützung für die Arbeit mit Markup-Languages:Languages:XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI'sXML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's
GroovyMarkup bietet eine einheitliche SchnittstelleGroovyMarkup bietet eine einheitliche SchnittstelleElemente sind ClosuresElemente sind ClosuresAttribute sind MapsAttribute sind Maps
Copyright 2006 Thorsten Kamann
GroovyMarkupGroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-Groovy bietet Unterstützung für die Arbeit mit Markup-Languages:Languages:XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI'sXML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's
GroovyMarkup bietet eine einheitliche SchnittstelleGroovyMarkup bietet eine einheitliche SchnittstelleElemente sind ClosuresElemente sind ClosuresAttribute sind MapsAttribute sind Maps
Vollständige Integration anderer Groovy-FeaturesVollständige Integration anderer Groovy-FeaturesCollections, Arrays, Conditions, ...Collections, Arrays, Conditions, ...
Copyright 2006 Thorsten Kamann
GroovyMarkup (Beispiel)GroovyMarkup (Beispiel)builder = new MarkupBuilder(writer) builder.person() {
name(first:"Megan", last:"Smith") {age("33")
}}
Copyright 2006 Thorsten Kamann
GroovyMarkup (Beispiel)GroovyMarkup (Beispiel)builder = new MarkupBuilder(writer) builder.person() {
name(first:"Megan", last:"Smith") {age("33")
}}
<person><name first=“Megan“ last=“Smith“>
<age>33</age></name>
</person>
Copyright 2006 Thorsten Kamann
GPath
Copyright 2006 Thorsten Kamann
GPathGPath
Ist eine Expression-Language für Daten mit BaumstrukturenIst eine Expression-Language für Daten mit Baumstrukturen
Copyright 2006 Thorsten Kamann
GPathGPath
Ist eine Expression-Language für Daten mit BaumstrukturenIst eine Expression-Language für Daten mit Baumstrukturen
Copyright 2006 Thorsten Kamann
GPathGPath
Ist eine Expression-Language für Daten mit BaumstrukturenIst eine Expression-Language für Daten mit BaumstrukturenImplementierung für XMLImplementierung für XML
Copyright 2006 Thorsten Kamann
GPathGPath
Ist eine Expression-Language für Daten mit BaumstrukturenIst eine Expression-Language für Daten mit BaumstrukturenImplementierung für XMLImplementierung für XMLPfade zu einem Element können spezifiziert werdenPfade zu einem Element können spezifiziert werden
a.b.c findet alle findet alle <c>-Elemente innerhalb aller -Elemente innerhalb aller <b> innerhalb aller innerhalb aller <a>
Copyright 2006 Thorsten Kamann
GPathGPath
Ist eine Expression-Language für Daten mit BaumstrukturenIst eine Expression-Language für Daten mit BaumstrukturenImplementierung für XMLImplementierung für XMLPfade zu einem Element können spezifiziert werdenPfade zu einem Element können spezifiziert werden
a.b.c findet alle findet alle <c>-Elemente innerhalb aller -Elemente innerhalb aller <b> innerhalb aller innerhalb aller <a>
Auch Attribute können spezifiziert werdenAuch Attribute können spezifiziert werdena["@href"] -> findet alle href-Attribute in -> findet alle href-Attribute in <a>--
ElementenElementena.@href -> eine Alternativ-Syntax dazu -> eine Alternativ-Syntax dazu
Copyright 2006 Thorsten Kamann
GroovyBeans
Copyright 2006 Thorsten Kamann
GroovyBeansGroovyBeans
GroovyBeans sind wie JavaBeans, nur einfacher zu GroovyBeans sind wie JavaBeans, nur einfacher zu definierendefinieren
Copyright 2006 Thorsten Kamann
GroovyBeansGroovyBeans
GroovyBeans sind wie JavaBeans, nur einfacher zu GroovyBeans sind wie JavaBeans, nur einfacher zu definierendefinieren
Customer.groovy:class Customer { int id String name}
Copyright 2006 Thorsten Kamann
GroovyBeansGroovyBeans
Customer.java:public class Customer { private int id = 0; private String name; public int getId(){ return id; } public void setId(int id){
this.id = id; } ...}
Customer.groovy:class Customer { int id String name}
GroovyBeans sind wie JavaBeans, nur einfacher zu GroovyBeans sind wie JavaBeans, nur einfacher zu definierendefinieren
Copyright 2006 Thorsten Kamann
GroovyBeansGroovyBeans
Regeln für Properties:Regeln für Properties:Wenn eine Property als Wenn eine Property als private gekennzeichnet ist, gekennzeichnet ist,
wird ein Java Field benutzt, um diese Property zu wird ein Java Field benutzt, um diese Property zu repräsentierenrepräsentieren
Copyright 2006 Thorsten Kamann
GroovyBeansGroovyBeans
Regeln für Properties:Regeln für Properties:Wenn eine Property als Wenn eine Property als public oder oder protected
gekennzeichnet wird, werden Getter- und Setter-gekennzeichnet wird, werden Getter- und Setter-Methoden mit der gleichen Sichtbarkeit und ein Feld mit Methoden mit der gleichen Sichtbarkeit und ein Feld mit der Sichtbarkeit der Sichtbarkeit private auf Bytecode-Ebene erzeugt auf Bytecode-Ebene erzeugt
Copyright 2006 Thorsten Kamann
GroovyBeansGroovyBeans
Regeln für Properties:Regeln für Properties:Wenn keine Getter- oder Setter-Methoden für Properties Wenn keine Getter- oder Setter-Methoden für Properties
mit der Sichtbarkeit mit der Sichtbarkeit public oder oder protected deklariert deklariert wurden, werden fehlende Getter- und Setter-Methoden wurden, werden fehlende Getter- und Setter-Methoden mit der gleichen Sichtbarkeit automatisch auf Bytecode-mit der gleichen Sichtbarkeit automatisch auf Bytecode-Ebene erzeugtEbene erzeugt
Copyright 2006 Thorsten Kamann
GroovyBeansGroovyBeans
Regeln für Properties:Regeln für Properties:Mit selbst deklarierten Getter- und Setter-Methoden Mit selbst deklarierten Getter- und Setter-Methoden
können die von der Groovy-Runtime generierten können die von der Groovy-Runtime generierten Methoden überschrieben werdenMethoden überschrieben werden
Copyright 2006 Thorsten Kamann
RegEx
Copyright 2006 Thorsten Kamann
Reguläre AusdrückeReguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstütztReguläre Ausdrücke werden von Groovy nativ unterstützt
Copyright 2006 Thorsten Kamann
Reguläre AusdrückeReguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstütztReguläre Ausdrücke werden von Groovy nativ unterstütztDie Die ~"..." Expression wird automatisch in ein Java-Pattern "..." Expression wird automatisch in ein Java-Pattern
Objekt kompiliertObjekt kompiliert
Copyright 2006 Thorsten Kamann
Reguläre AusdrückeReguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstütztReguläre Ausdrücke werden von Groovy nativ unterstütztDie Die ~"..." Expression wird automatisch in ein Java-Pattern "..." Expression wird automatisch in ein Java-Pattern
Objekt kompiliertObjekt kompiliert=~ Create Matcher Create Matcher
Copyright 2006 Thorsten Kamann
Reguläre AusdrückeReguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstütztReguläre Ausdrücke werden von Groovy nativ unterstütztDie Die ~"..." Expression wird automatisch in ein Java-Pattern "..." Expression wird automatisch in ein Java-Pattern
Objekt kompiliertObjekt kompiliert=~ Create Matcher Create Matcherassert "cheesecheese" =~ /cheese/
Copyright 2006 Thorsten Kamann
Reguläre AusdrückeReguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstütztReguläre Ausdrücke werden von Groovy nativ unterstütztDie Die ~"..." Expression wird automatisch in ein Java-Pattern "..." Expression wird automatisch in ein Java-Pattern
Objekt kompiliertObjekt kompiliert=~ Create Matcher Create Matcherassert "cheesecheese" =~ /cheese/
==~ Matches Regex Matches Regex
Copyright 2006 Thorsten Kamann
Reguläre AusdrückeReguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstütztReguläre Ausdrücke werden von Groovy nativ unterstütztDie Die ~"..." Expression wird automatisch in ein Java-Pattern "..." Expression wird automatisch in ein Java-Pattern
Objekt kompiliertObjekt kompiliert=~ Create Matcher Create Matcherassert "cheesecheese" =~ /cheese/
==~ Matches Regex Matches Regexassert "cheesecheese" ==~ /.*ees.*/
Copyright 2006 Thorsten Kamann
Gra ils
Copyright 2006 Thorsten Kamann
GrailsGrails
Grails ist ein Webapplication-FrameworkGrails ist ein Webapplication-Framework
Copyright 2006 Thorsten Kamann
GrailsGrails
Grails ist ein Webapplication-FrameworkGrails ist ein Webapplication-FrameworkEs vereinfacht die Entwicklung von Webanwendungen durchEs vereinfacht die Entwicklung von Webanwendungen durch
das Coding By Convention-Paradigmadas Coding By Convention-Paradigma
Copyright 2006 Thorsten Kamann
GrailsGrails
Grails ist ein Webapplication-FrameworkGrails ist ein Webapplication-FrameworkEs vereinfacht die Entwicklung von Webanwendungen durchEs vereinfacht die Entwicklung von Webanwendungen durch
das Coding By Convention-Paradigmadas Coding By Convention-Paradigmadie Verwendung von Spring/Hibernatedie Verwendung von Spring/Hibernate
Copyright 2006 Thorsten Kamann
GrailsGrails
Grails ist ein Webapplication-FrameworkGrails ist ein Webapplication-FrameworkEs vereinfacht die Entwicklung von Webanwendungen durchEs vereinfacht die Entwicklung von Webanwendungen durch
das Coding By Convention-Paradigmadas Coding By Convention-Paradigmadie Verwendung von Spring/Hibernatedie Verwendung von Spring/Hibernateeigene GSP (Groovy Server Pages) mit dynamischen eigene GSP (Groovy Server Pages) mit dynamischen
TagLibrariesTagLibraries
Copyright 2006 Thorsten Kamann
Grails (Screenshots)Grails (Screenshots)
Copyright 2006 Thorsten Kamann
Grails (Screenshots)Grails (Screenshots)
Copyright 2006 Thorsten Kamann
Grails (Screenshots)Grails (Screenshots)
Copyright 2006 Thorsten Kamann
Grails (Screenshots)Grails (Screenshots)
Copyright 2006 Thorsten Kamann
GrailsGrails
Die zentrale Komponente ist die Domänenklasse (Entity)Die zentrale Komponente ist die Domänenklasse (Entity)
Copyright 2006 Thorsten Kamann
GrailsGrails
Die zentrale Komponente ist die Domänenklasse (Entity)Die zentrale Komponente ist die Domänenklasse (Entity)Daraus können der Controller und die Views für eine CRUD-Daraus können der Controller und die Views für eine CRUD-
Anwendung generiert werdenAnwendung generiert werden
Copyright 2006 Thorsten Kamann
GrailsGrails
Die zentrale Komponente ist die Domänenklasse (Entity)Die zentrale Komponente ist die Domänenklasse (Entity)Daraus können der Controller und die Views für eine CRUD-Daraus können der Controller und die Views für eine CRUD-
Anwendung generiert werdenAnwendung generiert werdenAnbindung an Enterprise-Systeme kann über SpringBeans Anbindung an Enterprise-Systeme kann über SpringBeans
erfolgenerfolgen
Copyright 2006 Thorsten Kamann
GrailsGrails
Die zentrale Komponente ist die Domänenklasse (Entity)Die zentrale Komponente ist die Domänenklasse (Entity)Daraus können der Controller und die Views für eine CRUD-Daraus können der Controller und die Views für eine CRUD-
Anwendung generiert werdenAnwendung generiert werdenAnbindung an Enterprise-Systeme kann über SpringBeans Anbindung an Enterprise-Systeme kann über SpringBeans
erfolgenerfolgenAls View-Technologie ist zur Zeit JSP und GSP vorgesehenAls View-Technologie ist zur Zeit JSP und GSP vorgesehen
Copyright 2006 Thorsten Kamann
GrailsGrails
Die zentrale Komponente ist die Domänenklasse (Entity)Die zentrale Komponente ist die Domänenklasse (Entity)Daraus können der Controller und die Views für eine CRUD-Daraus können der Controller und die Views für eine CRUD-
Anwendung generiert werdenAnwendung generiert werdenAnbindung an Enterprise-Systeme kann über SpringBeans Anbindung an Enterprise-Systeme kann über SpringBeans
erfolgenerfolgenAls View-Technologie ist zur Zeit JSP und GSP vorgesehenAls View-Technologie ist zur Zeit JSP und GSP vorgesehenEclipse Integration ist in ArbeitEclipse Integration ist in Arbeit
Copyright 2006 Thorsten Kamann
GrailsGrails
Die zentrale Komponente ist die Domänenklasse (Entity)Die zentrale Komponente ist die Domänenklasse (Entity)Daraus können der Controller und die Views für eine CRUD-Daraus können der Controller und die Views für eine CRUD-
Anwendung generiert werdenAnwendung generiert werdenAnbindung an Enterprise-Systeme kann über SpringBeans Anbindung an Enterprise-Systeme kann über SpringBeans
erfolgenerfolgenAls View-Technologie ist zur Zeit JSP und GSP vorgesehenAls View-Technologie ist zur Zeit JSP und GSP vorgesehenEclipse Integration ist in ArbeitEclipse Integration ist in ArbeitSehr leichte Integration in eine MDSD-UmgebungSehr leichte Integration in eine MDSD-Umgebung
Copyright 2006 Thorsten Kamann
Gorm
Copyright 2006 Thorsten Kamann
GORMGORM
Ist der OR-Mapper für GrailsIst der OR-Mapper für Grails
Copyright 2006 Thorsten Kamann
GORMGORM
Ist der OR-Mapper für GrailsIst der OR-Mapper für GrailsUnter der Haube wird Hibernate 3 verwendetUnter der Haube wird Hibernate 3 verwendet
Copyright 2006 Thorsten Kamann
GORMGORM
Ist der OR-Mapper für GrailsIst der OR-Mapper für GrailsUnter der Haube wird Hibernate 3 verwendetUnter der Haube wird Hibernate 3 verwendetDie Konfiguration wird komplett in den Groovy-Files Die Konfiguration wird komplett in den Groovy-Files
vorgenommenvorgenommen
Copyright 2006 Thorsten Kamann
GORMGORM
Ist der OR-Mapper für GrailsIst der OR-Mapper für GrailsUnter der Haube wird Hibernate 3 verwendetUnter der Haube wird Hibernate 3 verwendetDie Konfiguration wird komplett in den Groovy-Files Die Konfiguration wird komplett in den Groovy-Files
vorgenommenvorgenommenAlle Features von Hibernate werden unterstütztAlle Features von Hibernate werden unterstützt
Copyright 2006 Thorsten Kamann
GORMGORM
Ist der OR-Mapper für GrailsIst der OR-Mapper für GrailsUnter der Haube wird Hibernate 3 verwendetUnter der Haube wird Hibernate 3 verwendetDie Konfiguration wird komplett in den Groovy-Files Die Konfiguration wird komplett in den Groovy-Files
vorgenommenvorgenommenAlle Features von Hibernate werden unterstütztAlle Features von Hibernate werden unterstütztIn Verbindung mit Spring ist es möglich, Transaktionen in In Verbindung mit Spring ist es möglich, Transaktionen in
Grails-Anwendungen flexibel zu verwaltenGrails-Anwendungen flexibel zu verwalten
Copyright 2006 Thorsten Kamann
Groovle ts
Copyright 2006 Thorsten Kamann
GroovletsGroovlets
Groovlets sind Java-Servlets in Groovy geschriebenGroovlets sind Java-Servlets in Groovy geschrieben
Copyright 2006 Thorsten Kamann
GroovletsGroovlets
Groovlets sind Java-Servlets in Groovy geschriebenGroovlets sind Java-Servlets in Groovy geschriebenEs gibt ein GroovyServlet, welches Groovy-Skripte Es gibt ein GroovyServlet, welches Groovy-Skripte
automatisch kompiliert, ausführt und cachedautomatisch kompiliert, ausführt und cached
Copyright 2006 Thorsten Kamann
GroovletsGroovlets
Groovlets sind Java-Servlets in Groovy geschriebenGroovlets sind Java-Servlets in Groovy geschriebenEs gibt ein GroovyServlet, welches Groovy-Skripte Es gibt ein GroovyServlet, welches Groovy-Skripte
automatisch kompiliert, ausführt und cachedautomatisch kompiliert, ausführt und cached
Copyright 2006 Thorsten Kamann
GroovletsGroovlets
Implizite Variablen:Implizite Variablen:Variable Gebunden an BemerkungRequest ServletRequest Response ServletResponseContext ServletContextApplication ServletContext Session getSession(false) Out response.getWriter() Können nicht re-assigned werdenCout response.getOutputStream() Können nicht re-assigned werdenHtml new MarkupBuilder(out) Können nicht re-assigned werden
Copyright 2006 Thorsten Kamann
GSQL
Copyright 2006 Thorsten Kamann
GSQLGSQL
Vereinfacht das Arbeiten mit SQL Vereinfacht das Arbeiten mit SQL
Copyright 2006 Thorsten Kamann
GSQLGSQL
Vereinfacht das Arbeiten mit SQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -StatementsUnterstützung von SQL-Queries und -Statements
Copyright 2006 Thorsten Kamann
GSQLGSQL
Vereinfacht das Arbeiten mit SQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -StatementsUnterstützung von SQL-Queries und -StatementsClosures bieten komfortables Arbeiten mit den ResultSetsClosures bieten komfortables Arbeiten mit den ResultSets
Copyright 2006 Thorsten Kamann
GSQLGSQL
Vereinfacht das Arbeiten mit SQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -StatementsUnterstützung von SQL-Queries und -StatementsClosures bieten komfortables Arbeiten mit den ResultSetsClosures bieten komfortables Arbeiten mit den ResultSets
def sql = Sql.newInstance("url", "user","pwd", "driver")sql.eachRow("select * from FOOD where type=${foo}") {
println "Gromit likes ${it.name}"}
Copyright 2006 Thorsten Kamann
GSQLGSQL
Vereinfacht das Arbeiten mit SQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -StatementsUnterstützung von SQL-Queries und -StatementsClosures bieten komfortables Arbeiten mit den ResultSetsClosures bieten komfortables Arbeiten mit den ResultSets
def sql = Sql.newInstance("url", "user","pwd", "driver")def food = sql.dataSet('FOOD')def cheese = food.findAll { it.type == 'cheese' }cheese.each { println "Eat ${it.name}" }
Copyright 2006 Thorsten Kamann
Ant-Sc ripting
Copyright 2006 Thorsten Kamann
Ant-ScriptingAnt-Scripting
Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzenerstellen und zu benutzen
Copyright 2006 Thorsten Kamann
Ant-ScriptingAnt-Scripting
Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzenerstellen und zu benutzen
ant = new AntBuilder()ant.echo(message:"mapping it via attribute!") ant.echo("Hello World!")
Copyright 2006 Thorsten Kamann
Ant-ScriptingAnt-Scripting
Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzenerstellen und zu benutzen
ant = new AntBuilder()try{
ant.javac(srcdir:"/src", destdir:"/dest/" )}catch(Throwable thr){
ant.mail(mailhost:"host", subject:"build failure"){from(address:"[email protected]"), to(address:"[email protected]")message("Unable to compile sources.")
}}
Copyright 2006 Thorsten Kamann
GroovyTempla te s
Copyright 2006 Thorsten Kamann
Groovy TemplatesGroovy Templates
Bietet ein Framework, um eine eigene Template-Engine zu Bietet ein Framework, um eine eigene Template-Engine zu entwickelnentwickeln
Copyright 2006 Thorsten Kamann
Groovy TemplatesGroovy Templates
Bietet ein Framework, um eine eigene Template-Engine zu Bietet ein Framework, um eine eigene Template-Engine zu entwickelnentwickeln
Enthalten ist die SimpleTemplateEngine, die JSP-like Enthalten ist die SimpleTemplateEngine, die JSP-like mittels Scripts, Scriptlets und EL parameterisierte Texte mittels Scripts, Scriptlets und EL parameterisierte Texte generieren kanngenerieren kann
Copyright 2006 Thorsten Kamann
Groovy Templates (Beispiel)Groovy Templates (Beispiel)def text = 'Dear \"${firstname} ${lastname}\",\nSo nice to meet you in <% print city %>.'
def binding = ["firstname":"Peter", "lastname":"Schulze", "city":"Dortmund"]
def engine = new SimpleTemplateEngine()template = engine.createTemplate(text).make(binding)
def result = 'Dear "Peter Schulze",\nSo nice to meet you in Dortmund.'
assert result == template.toString()
Copyright 2006 Thorsten Kamann
S icherhe it
Copyright 2006 Thorsten Kamann
SicherheitSicherheit
Groovy-Skripte können innerhalb des Java Security-Groovy-Skripte können innerhalb des Java Security-Managers ausgeführt werdenManagers ausgeführt werden
Copyright 2006 Thorsten Kamann
SicherheitSicherheit
Groovy-Skripte können innerhalb des Java Security-Groovy-Skripte können innerhalb des Java Security-Managers ausgeführt werdenManagers ausgeführt werden
Copyright 2006 Thorsten Kamann
SicherheitSicherheit
Groovy-Skripte können innerhalb des Java Security-Groovy-Skripte können innerhalb des Java Security-Managers ausgeführt werdenManagers ausgeführt werden
security.policy:grant codeBase "file:/serverCodeBase/restrictedClient" {
permission java.security.AllPermission;};
Copyright 2006 Thorsten Kamann
SicherheitSicherheit
Groovy-Skripte können innerhalb des Java Security-Groovy-Skripte können innerhalb des Java Security-Managers ausgeführt werdenManagers ausgeführt werden
security.policy:grant codeBase "file:/serverCodeBase/restrictedClient" {
permission java.security.AllPermission;};Java-Code:new GroovyShell().evaluate(
new GroovyCodeSource(clientscriptStr, "RestrictedScript", "/serverCodeBase/restrictedClient")
Copyright 2006 Thorsten Kamann
Sc riptomSc riptom
Copyright 2006 Thorsten Kamann
ScriptomScriptom
Scriptom ist ein optionales Modul für die Verwendung mit Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automationdem Windows Scripting Host oder OLE COM Automation
Copyright 2006 Thorsten Kamann
ScriptomScriptom
Scriptom ist ein optionales Modul für die Verwendung mit Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automationdem Windows Scripting Host oder OLE COM Automation
import org.codehaus.groovy.scriptom.ActiveXProxydef explorer = new
ActiveXProxy("InternetExplorer.Application")explorer.Visible = trueexplorer.AddressBar = trueexplorer.Navigate("http://www.itemis.de/")
Copyright 2006 Thorsten Kamann
ScriptomScriptom
Scriptom ist ein optionales Modul für die Verwendung mit Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automationdem Windows Scripting Host oder OLE COM Automation
import org.codehaus.groovy.scriptom.ActiveXProxyimport java.io.Filedef word = new ActiveXProxy("Word.Application")word.Documents.Open(new File(args[0]).canonicalPath)word.ActiveDocument.SaveAs(new File(args[0] - ".doc" + ".html").canonicalPath, 8)word.Quit()
Copyright 2006 Thorsten Kamann
Weite reModule
Copyright 2006 Thorsten Kamann
Weitere ModuleWeitere Module
Gant Gant
Gant ist ein Build-Tool auf Basis von Ant. Anstatt XML zu Gant ist ein Build-Tool auf Basis von Ant. Anstatt XML zu verwenden, wird ein Groovy-Dialekt benutzt, um die Ant-verwenden, wird ein Groovy-Dialekt benutzt, um die Ant-Targets und -Tasks zu konfigurieren.Targets und -Tasks zu konfigurieren.
Copyright 2006 Thorsten Kamann
Weitere ModuleWeitere Module
Google Data Support Google Data Support
Google bietet den Zugriff auf seine Services. Mit Google Google bietet den Zugriff auf seine Services. Mit Google Data Support wird der Zugriff darauf wesentlich Data Support wird der Zugriff darauf wesentlich vereinfacht.vereinfacht.
Copyright 2006 Thorsten Kamann
Weitere ModuleWeitere Module
GramGram
Gram unterstützt bei der Verwendung von Xdoclet-Tags und Gram unterstützt bei der Verwendung von Xdoclet-Tags und Annotations in Groovy-Scripts.Annotations in Groovy-Scripts.
Copyright 2006 Thorsten Kamann
Weitere ModuleWeitere Module
Groovy Jabber-RPCGroovy Jabber-RPC
Damit können XML-RPC Aufrufe über das Jabber-Protokol Damit können XML-RPC Aufrufe über das Jabber-Protokol abgesetzt werden. Bietet die Möglichkeit sowohl einen abgesetzt werden. Bietet die Möglichkeit sowohl einen Server als auch einen Client zu erstellen.Server als auch einen Client zu erstellen.
Copyright 2006 Thorsten Kamann
Weitere ModuleWeitere Module
Groovy MonkeyGroovy Monkey
Groovy Monkey ist ein Port des Eclipse-Monkey Projekts. Groovy Monkey ist ein Port des Eclipse-Monkey Projekts. Damit kann Eclipse über Groovy-Scripts automatisiert Damit kann Eclipse über Groovy-Scripts automatisiert werden.werden.
Copyright 2006 Thorsten Kamann
Weitere ModuleWeitere Module
Groovy SOAPGroovy SOAP
Damit können sowohl ein Soap-Server als auch ein Soap-Damit können sowohl ein Soap-Server als auch ein Soap-Client erstellt werden.Client erstellt werden.
Copyright 2006 Thorsten Kamann
Weitere ModuleWeitere Module
GroovySWTGroovySWT
Auch SWT-UI's können mittels Groovy erstellt werden.Auch SWT-UI's können mittels Groovy erstellt werden.
Copyright 2006 Thorsten Kamann
Weitere ModuleWeitere Module
ProcessProcess
Wird auch GrooSH – Groovy Shell – genannt. Hiermit ist es Wird auch GrooSH – Groovy Shell – genannt. Hiermit ist es möglich Funktionen einer (Unix-)Shell nachzubilden.möglich Funktionen einer (Unix-)Shell nachzubilden.
Copyright 2006 Thorsten Kamann
Weitere ModuleWeitere Module
XMLRPCXMLRPC
Ermöglicht XML-RPC Calls an lokale oder enfernte RPC-Ermöglicht XML-RPC Calls an lokale oder enfernte RPC-Server abzusetzen.Server abzusetzen.
Copyright 2006 Thorsten Kamann
Tes ting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
TestingTesting
Copyright 2006 Thorsten Kamann
Testing - jUnit-TestingTesting - jUnit-Testing
Basiert auf jUnit und erweitert die AssertsBasiert auf jUnit und erweitert die Asserts
Copyright 2006 Thorsten Kamann
Testing - jUnit-TestingTesting - jUnit-Testing
Basiert auf jUnit und erweitert die AssertsBasiert auf jUnit und erweitert die Asserts assertArrayEquals(Object[] expected, Object[] value) assertLength(int length, char[] array) assertLength(int length, int[] array) assertLength(int length, Object[] array) assertContains(char expected, char[] array) assertContains(int expected, int[] array) assertToString(Object value, String expected) assertInspect(Object value, String expected) assertScript(final String script) shouldFail(Closure code) shouldFail(Class clazz, Closure code)
Copyright 2006 Thorsten Kamann
IDESupport
Copyright 2006 Thorsten Kamann
IDE-SupportIDE-Support
Copyright 2006 Thorsten Kamann
IDE-SupportIDE-Support
Copyright 2006 Thorsten Kamann
IDE-SupportIDE-Support
Copyright 2006 Thorsten Kamann
IDE-SupportIDE-Support
Copyright 2006 Thorsten Kamann
IDE-SupportIDE-Support
Copyright 2006 Thorsten Kamann
IDE-SupportIDE-Support
Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse MonkeyGroovy Monkey ist ein Aufsatz auf Eclipse Monkey
Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse MonkeyGroovy Monkey ist ein Aufsatz auf Eclipse MonkeyDamit kann Eclipse geskriptet werdenDamit kann Eclipse geskriptet werden
Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse MonkeyGroovy Monkey ist ein Aufsatz auf Eclipse MonkeyDamit kann Eclipse geskriptet werdenDamit kann Eclipse geskriptet werdenNützlich fürNützlich für
Automatisierungs-Task (Quelltext-Suche, Erstellen von Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks)Tasks)
Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse MonkeyGroovy Monkey ist ein Aufsatz auf Eclipse MonkeyDamit kann Eclipse geskriptet werdenDamit kann Eclipse geskriptet werdenNützlich fürNützlich für
Automatisierungs-Task (Quelltext-Suche, Erstellen von Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks)Tasks)
Erstellen von LaunchManagernErstellen von LaunchManagern
Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse MonkeyGroovy Monkey ist ein Aufsatz auf Eclipse MonkeyDamit kann Eclipse geskriptet werdenDamit kann Eclipse geskriptet werdenNützlich fürNützlich für
Automatisierungs-Task (Quelltext-Suche, Erstellen von Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks)Tasks)
Erstellen von LaunchManagernErstellen von LaunchManagernPrototyping von PluginsPrototyping von Plugins
Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse MonkeyGroovy Monkey ist ein Aufsatz auf Eclipse MonkeyDamit kann Eclipse geskriptet werdenDamit kann Eclipse geskriptet werdenNützlich fürNützlich für
Automatisierungs-Task (Quelltext-Suche, Erstellen von Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks)Tasks)
Erstellen von LaunchManagernErstellen von LaunchManagernPrototyping von PlugInsPrototyping von PlugIns
Basiert auf dem Eclipse-Job APIBasiert auf dem Eclipse-Job API
Copyright 2006 Thorsten Kamann
Zus ammen-Fas s ung
Copyright 2006 Thorsten Kamann
ZusammenfassungZusammenfassung
Groovy ist schon sehr weit fortgeschrittenGroovy ist schon sehr weit fortgeschritten
Copyright 2006 Thorsten Kamann
ZusammenfassungZusammenfassung
Groovy ist schon sehr weit fortgeschrittenGroovy ist schon sehr weit fortgeschrittenEs gibt eine grosse Anzahl an zusätzlichen Modulen, die die Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
meisten Anwendungsfälle abdeckenmeisten Anwendungsfälle abdecken
Copyright 2006 Thorsten Kamann
ZusammenfassungZusammenfassung
Groovy ist schon sehr weit fortgeschrittenGroovy ist schon sehr weit fortgeschrittenEs gibt eine grosse Anzahl an zusätzlichen Modulen, die die Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
meisten Anwendungsfälle abdeckenmeisten Anwendungsfälle abdeckenDurch die Standardisierung (JSR 241) ist auch eine gewisse Durch die Standardisierung (JSR 241) ist auch eine gewisse
Zukunftssicherheit gewährleistetZukunftssicherheit gewährleistet
Copyright 2006 Thorsten Kamann
ZusammenfassungZusammenfassung
Groovy ist schon sehr weit fortgeschrittenGroovy ist schon sehr weit fortgeschrittenEs gibt eine grosse Anzahl an zusätzlichen Modulen, die die Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
meisten Anwendungsfälle abdeckenmeisten Anwendungsfälle abdeckenDurch die Standardisierung (JSR 241) ist auch eine gewisse Durch die Standardisierung (JSR 241) ist auch eine gewisse
Zukunftssicherheit gewährleistetZukunftssicherheit gewährleistetGroovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit Groovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit
der Java-Syntax bestehender Java-Syntax bestehen
Copyright 2006 Thorsten Kamann
ZusammenfassungZusammenfassung
Groovy ist schon sehr weit fortgeschrittenGroovy ist schon sehr weit fortgeschrittenEs gibt eine grosse Anzahl an zusätzlichen Modulen, die die Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
meisten Anwendungsfälle abdeckenmeisten Anwendungsfälle abdeckenDurch die Standardisierung (JSR 241) ist auch eine gewisse Durch die Standardisierung (JSR 241) ist auch eine gewisse
Zukunftssicherheit gewährleistetZukunftssicherheit gewährleistetGroovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit Groovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit
der Java-Syntax bestehender Java-Syntax bestehenNeben dem leistungsfähigen API von Groovy steht die Neben dem leistungsfähigen API von Groovy steht die
gesamte API von Java zur Verfügunggesamte API von Java zur Verfügung
Copyright 2006 Thorsten Kamann
Links
Copyright 2006 Thorsten Kamann
LinksLinks
Groovy HomepageGroovy Homepagehttp://groovy.codehaus.org/
JSR 241JSR 241http://www.jcp.org/en/jsr/detail?id=241
GrailsGrailshttp://grails.codehaus.org/
Artikel über GroovyArtikel über Groovyhttp://groovy.codehaus.org/Articles
Webseite des AutorsWebseite des Autorshttp://www.planetes.de/thorsten-kamann