• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Groovy - Rocks or Not?
 

Groovy - Rocks or Not?

on

  • 2,002 views

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

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.

Statistics

Views

Total Views
2,002
Views on SlideShare
1,983
Embed Views
19

Actions

Likes
0
Downloads
12
Comments
0

3 Embeds 19

http://www.thorsten-kamann.de 10
http://www.slideshare.net 8
http://www.health.medicbd.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Groovy - Rocks or Not? Groovy - Rocks or Not? Presentation Transcript

    • von und mit Thorsten Kamann Copyright 2006 Thorsten Kamann
    • Einleitung Getting Started Embedding Die Syntax Groovy Highlights XML-Processing, Markup, GPath, Groovy Beans, RegEX... Module Grails, Gorm, Scriptom... Testing IDE-Support Zusammenfassung/Links Copyright 2006 Thorsten Kamann
    • Einle itung Copyright 2006 Thorsten Kamann
    • Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Copyright 2006 Thorsten Kamann
    • Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Kein Deklarationszwang für Variablen Copyright 2006 Thorsten Kamann
    • Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Kein Deklarationszwang für Variablen automatische Speicherverwaltung Copyright 2006 Thorsten Kamann
    • Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Kein Deklarationszwang für Variablen automatische Speicherverwaltung werden in der Regel ohne getrennte Übersetzungsphase ausgeführt (d. h. sie werden „interpretiert“) Copyright 2006 Thorsten Kamann
    • Was ist Groovy? Eine dynamische Sprache Copyright 2006 Thorsten Kamann
    • Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Copyright 2006 Thorsten Kamann
    • Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Copyright 2006 Thorsten Kamann
    • Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Um sie Java-Entwicklern zugänglich zu machen Copyright 2006 Thorsten Kamann
    • Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Um sie Java-Entwicklern zugänglich zu machen Um möglichst viel der Java-Syntax wieder verwenden zu können Copyright 2006 Thorsten Kamann
    • Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Um sie Java-Entwicklern zugänglich zu machen Um möglichst viel der Java-Syntax wieder verwenden zu können Um eine einfache Anbindung zu Enterprise-Systemen anzubieten Copyright 2006 Thorsten Kamann
    • Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Um sie Java-Entwicklern zugänglich zu machen Um möglichst viel der Java-Syntax wieder verwenden zu können Um eine einfache Anbindung zu Enterprise-Systemen anzubieten Das Ergebnis des JSR 241: The Groovy Programming Language Copyright 2006 Thorsten Kamann
    • Ge tting S ta rte d Copyright 2006 Thorsten Kamann
    • Getting Started Download des aktuellen Release von http://groovy.codehaus.org Copyright 2006 Thorsten Kamann
    • Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Copyright 2006 Thorsten Kamann
    • Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Setzen der Umgebungsvariable GROOVY_HOME Copyright 2006 Thorsten Kamann
    • Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Setzen der Umgebungsvariable GROOVY_HOME Hinzufügen von %GROOVY_HOME%bin zur PATH-Variable Copyright 2006 Thorsten Kamann
    • Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Setzen der Umgebungsvariable GROOVY_HOME Hinzufügen von %GROOVY_HOME%bin zur PATH-Variable Starten von groovyConsole und Eingabe von println „Hallo Welt“ mit anschliessendem STRG-R Copyright 2006 Thorsten Kamann
    • Getting Started Copyright 2006 Thorsten Kamann
    • Embe dding Copyright 2006 Thorsten Kamann
    • Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
    • Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
    • Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
    • Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
    • Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
    • Embedding mit dem BSF Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache in Java-Anwendungen einzubinden Copyright 2006 Thorsten Kamann
    • Embedding mit dem BSF Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache in Java-Anwendungen einzubinden Groovy bietet aber leichtgewichtigere und leistungsfähigere Möglichkeiten der Einbindung Copyright 2006 Thorsten Kamann
    • Embedding mit GroovyShell GroovyShell bietet die Möglichkeit des Ein- und Auslesens von Variablen mittels des Binding-Objekts Copyright 2006 Thorsten Kamann
    • Embedding mit GroovyShell GroovyShell bietet die Möglichkeit des Ein- und Auslesens von Variablen mittels des Binding-Objekts Binding binding = new Binding(); binding.setVariable(quot;fooquot;, new Integer(2)); GroovyShell shell = new GroovyShell(binding); Object value = shell.evaluate( quot;println 'Hello World!'; x = 123; return foo * 10quot;); assert value.equals(new Integer(20)); assert binding.getVariable(quot;xquot;).equals(new Integer(123)); Copyright 2006 Thorsten Kamann
    • Embedding mit GroovyClassLoader Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methoden Copyright 2006 Thorsten Kamann
    • Embedding mit GroovyClassLoader Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methoden ClassLoader parent = getClass().getClassLoader(); GroovyClassLoader loader = new GroovyClassLoader(parent); Class groovyClass = loader.parseClass( new File(quot;script.groovyquot;)); GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance(); Object[] args = {}; groovyObject.invokeMethod(quot;runquot;, args); Copyright 2006 Thorsten Kamann
    • Embedding mit GroovyClassLoader Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methoden GroovyClassLoader gcl = new GroovyClassLoader(); Class clazz = gcl.parseClass( myStringwithGroovyClassSource, quot;SomeName.groovyquot;); Object aScript = clazz.newInstance(); MyInterface myObject = (MyInterface) aScript; myObject.interfaceMethod(); Copyright 2006 Thorsten Kamann
    • Embedding mit GroovyScriptEngine Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte auszuführen. Das Binding-Objekt befüllt dabei die Skripte mit Daten Copyright 2006 Thorsten Kamann
    • Embedding mit GroovyScriptEngine Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte auszuführen. Das Binding-Objekt befüllt dabei die Skripte mit Daten String[] roots = new String[] {quot;/my/groovy/script/pathquot;}; GroovyScriptEngine gse = new GroovyScriptEngine(roots); Binding binding = new Binding(); binding.setVariable(quot;inputquot;, quot;worldquot;); gse.run(quot;hello.groovyquot;, binding); System.out.println(binding.getVariable(quot;outputquot;)); Copyright 2006 Thorsten Kamann
    • Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können Copyright 2006 Thorsten Kamann
    • Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können GroovyC-Task, der Groovy-Skripte (Klassen) zu Java Bytecode kompiliert Copyright 2006 Thorsten Kamann
    • Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können GroovyC-Task, der Groovy-Skripte (Klassen) zu Java Bytecode kompiliert Erstellen von Ant-Tasks mit Groovy und dem Markup-Builder Copyright 2006 Thorsten Kamann
    • Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können GroovyC-Task, der Groovy-Skripte (Klassen) zu Java Bytecode kompiliert Erstellen von Ant-Tasks mit Groovy und dem Markup-Builder Erzeugen von Ant-Skripten Copyright 2006 Thorsten Kamann
    • Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Copyright 2006 Thorsten Kamann
    • Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können Copyright 2006 Thorsten Kamann
    • Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung von Groovy Copyright 2006 Thorsten Kamann
    • Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung von Groovy Groovy-Compiler Copyright 2006 Thorsten Kamann
    • Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung von Groovy Groovy-Compiler Groovy-Archetype Copyright 2006 Thorsten Kamann
    • Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung von Groovy Groovy-Compiler Groovy-Archetype Tools, um Maven-Plugins mit Groovy zu entwickeln Copyright 2006 Thorsten Kamann
    • Embedding in Windows Groovy kann direkt von der Eingabeaufforderung oder über Start-->Ausführen mittels groovy script.groovy [arguments] ausgeführt werden Copyright 2006 Thorsten Kamann
    • Embedding in Windows Groovy kann direkt von der Eingabeaufforderung oder über Start-->Ausführen mittels groovy script.groovy [arguments] ausgeführt werden Alternativ kann über den Dialog Ordneroptionen-->Dateitypen die Extension *.groovy an groovy.bat gebunden werden. Copyright 2006 Thorsten Kamann
    • Embedding in Linux Groovy kann direkt von der Konsole mittels groovy script.groovy [arguments] ausgeführt werden Copyright 2006 Thorsten Kamann
    • Embedding in Linux Groovy kann direkt von der Konsole mittels groovy script.groovy [arguments] ausgeführt werden Alternativ kann in die 1. Zeile eines Groovy-Skripts #!/usr/bin/env groovy eingefügt werden. So kann mit chmod +x script.groovy ./script.groovy das Skript ausgeführt werden Copyright 2006 Thorsten Kamann
    • Die S ynta x Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures Closures sind anonyme Codeblöcke Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen werden oft wie Anonyme Inner Classes in Java benutzt Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen werden oft wie Anonyme Inner Classes in Java benutzt werden erst ausgeführt, wenn call() auf der Closure aufgerufen wird Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen werden oft wie Anonyme Inner Classes in Java benutzt werden erst ausgeführt, wenn call() auf der Closure aufgerufen wird können an eine Variable gebunden werden Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures (Beispiele) Beispiele: { item++ } Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures (Beispiele) Beispiele: { name -> println name } Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures (Beispiele) Beispiele: {String x, int y -> println quot;hey $x the value is $yquot;} Copyright 2006 Thorsten Kamann
    • Die Syntax: Closures (Beispiele) Beispiele: { reader -> while (true) { line = reader.readLine() } } Copyright 2006 Thorsten Kamann
    • Die Syntax – Collections (Listen) Listen erzeugen immer eine Instanz von java.util.List Copyright 2006 Thorsten Kamann
    • Die Syntax – Collections (Listen) Listen erzeugen immer eine Instanz von java.util.List def list = [5, 6, 7, 8] assert list.get(2) == 7 assert list instanceof java.util.List Copyright 2006 Thorsten Kamann
    • Die Syntax – Collections (Listen) Listen erzeugen immer eine Instanz von java.util.List def emptyList = [] assert emptyList.size() == 0 emptyList.add(5) assert emptyList.size() == 1 Copyright 2006 Thorsten Kamann
    • Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Copyright 2006 Thorsten Kamann
    • Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Es gibt inklusive und exklusive Ranges Copyright 2006 Thorsten Kamann
    • Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Es gibt inklusive und exklusive Ranges def range = 5..8 assert range.contains(6) assert range.contains(8) Copyright 2006 Thorsten Kamann
    • Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Es gibt inklusive und exklusive Ranges def range = 5..<8 assert range.contains(6) assert !range.contains(8) Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (Maps) Maps basieren auf einer Implementierung von java.util.Map Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (Maps) Maps basieren auf einer Implementierung von java.util.Map def map = [name:quot;Gromitquot;, likes:quot;cheesequot;, id:1234] assert map.get(quot;namequot;) == quot;Gromitquot; assert map[quot;namequot;] == quot;Gromitquot; Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (Maps) Maps basieren auf einer Implementierung von java.util.Map def emptyMap = [:] emptyMap.foo = 5 assert emptyMap.foo == 5 Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (Expando) Expandos ermöglichen die Erzeugung von dynamischen Objekten Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (Expando) Expandos ermöglichen die Erzeugung von dynamischen Objekten def player = new Expando() player.name = quot;Peterquot; player.greeting = { quot;Hello, my name is $player.namequot; } assert player.greeting() == quot;Hello, my name is Peterquot; Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (each) Iterator mittels einer Closure Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (each) Iterator mittels einer Closure [1, 2, 3].each { item -> print quot;${item}-quot; } Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (collect) Erzeugt eine neue Liste mit dem Ergebnis der Closure Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (collect) Erzeugt 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) Gibt das erste Element einer Collection zurück, welches der Expression in der Closure entspricht Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (find) Gibt das erste Element einer Collection zurück, welches der Expression in der Closure entspricht def value = [1, 2, 3].find { it > 1 } assert value == 2 Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (findAll) Gibt eine Collection mit allen Elementen, die denen der Expression in der Closure entsprechen, zurück Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (findAll) Gibt eine Collection mit allen Elementen, die denen der Expression 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) Fügt einen zusätzlichen Wert zu einer Iteration hinzu Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (inject) Fügt einen zusätzlichen Wert zu einer Iteration hinzu def value = [quot;Javaquot;, quot;C#quot;, quot;C++quot;, quot;VBquot;] .inject(quot;Languages: quot;){str, item -> str+quot; quot;+item} assert value == „Languages: Java C# C++ VB“ Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (every) Gibt true zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechen Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (every) Gibt true zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechen def value = [1, 2, 3].every { it < 5 } assert value Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (every) Gibt true zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechen def value = [1, 2, 3].every { item -> item < 3 } assert !value Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (any) Gibt true zurück, wenn mindestens ein Wert in der Collection der Expression in der Closure entspricht Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (any) Gibt true zurück, wenn mindestens ein Wert in der Collection 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) Gibt true zurück, wenn mindestens ein Wert in der Collection 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) Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Comparable sein Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (max/min) Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Comparable sein def value = [9, 4, 2, 10, 5].max() assert value == 10 Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (max/min) Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Comparable sein def value = [9, 4, 2, 10, 5].min() assert value == 2 Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (max/min) Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Comparable sein def value = ['x', 'y', 'a', 'z'].min() assert value == 'a' Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (join) Fügt einen String zu den Werten einer Collection hinzu Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (join) Fügt einen String 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) Ranges verwenden, um Teile von Listen zu extrahieren def list = 100..200 def 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) Rückwärts gerichtete Ranges def text = quot;nice cheese gromit!quot; def name = text[3..1] assert name == quot;eciquot; Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (Beispiele) Negative Ranges – Index beginnt beim letzten Zeichen def text = quot;nice cheese gromit!quot; def x = text[-1] assert x == quot;!quot; Copyright 2006 Thorsten Kamann
    • Die Syntax: Collections (Beispiele) Negative Ranges – Index beginnt beim letzten Zeichen def text = quot;nice cheese gromit!quot; def name = text[-7..-2] assert name == quot;gromitquot; Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (while) Groovy unterstützt das aus Java bekannte while{..} Konstrukt Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (while) Groovy unterstützt das aus Java bekannte while{..} Konstrukt def x = 0 def y = 5 while ( y-- > 0 ) { x++ } assert x == 5 Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (for) Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (for) Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections def x = 0 for ( i in 0..9 ) { x += i } assert x == 45 Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (for) Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections x = 0 for ( i in [0, 1, 2, 3, 4] ) { x += i } assert x == 10 Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (each) each ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglich Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (each) each ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglich def stringList = [quot;javaquot;, quot;pythonquot;, quot;rubyquot;, quot;c#quot;, quot;groovyquot;] stringList.each() { print quot; ${it}quot; }; // java python ruby c# groovy Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (each) each ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglich def stringMap = [quot;Suquot; : quot;Sundayquot;, quot;Moquot; : quot;Mondayquot;] stringMap.each() { key, value -> println quot;${key} == ${value}quot; }; // Su == Sunday // Mo == Monday Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (eachWithIndex) Unterscheidet sich vom Looping mit each dadurch, dass ein Index mitgeführt wird Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (eachWithIndex) Unterscheidet sich vom Looping mit each dadurch, dass ein Index mitgeführt wird def stringList = [quot;javaquot;, quot;pythonquot;, quot;rubyquot;, quot;c#quot;, quot;groovyquot;] stringList.eachWithIndex() { obj, i -> println quot; ${i}: ${obj}quot; }; // 0: java 1: python 2: ruby 3: c# 4: groovy Copyright 2006 Thorsten Kamann
    • Die Syntax: Looping (eachWithIndex) Unterscheidet sich vom Looping mit each dadurch, dass ein Index mitgeführt wird def stringMap = [quot;Suquot; : quot;Sundayquot;, quot;Moquot; : quot;Mondayquot;] stringMap.eachWithIndex() { obj, i -> println quot; ${i}: ${obj}quot; }; // 0: Su=Sunday // 1: Mo=Monday Copyright 2006 Thorsten Kamann
    • Die Syntax: Conditions (if...else) Groovy unterstützt die aus Java bekannten if...else Konstrukte Copyright 2006 Thorsten Kamann
    • Die Syntax: Conditions (if...else) Groovy unterstützt die aus Java bekannten if...else Konstrukte def x = (y > 1) ? quot;workedquot; : quot;failedquot; if (x){ ... }else{ ... } Copyright 2006 Thorsten Kamann
    • Die Syntax: Conditions (switch) Das switch-Statement unterstützt Klassenvergleiche, Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke und equals Vergleiche Copyright 2006 Thorsten Kamann
    • Die Syntax: Conditions (switch) Das switch-Statement unterstützt Klassenvergleiche, Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke und equals Vergleiche switch ( x ) { case („foo“): ... case (20..30): ... case (Integer): ... default: ... } Copyright 2006 Thorsten Kamann
    • XML Proc e s s ing Copyright 2006 Thorsten Kamann
    • XML-Processing Groovy bietet reichhaltige Unterstützung für das XML- Processing Copyright 2006 Thorsten Kamann
    • XML-Processing Copyright 2006 Thorsten Kamann
    • XML-Processing Copyright 2006 Thorsten Kamann
    • XML-Processing Copyright 2006 Thorsten Kamann
    • XML-Processing Copyright 2006 Thorsten Kamann
    • XML-Processing Groovy bietet reichhaltige Unterstützung für das XML- Processing Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im XML-Dokument Copyright 2006 Thorsten Kamann
    • XML-Processing Groovy bietet reichhaltige Unterstützung für das XML- Processing Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im XML-Dokument DOMCategory stellt mächtige Navigationselemente zur Verfügung Copyright 2006 Thorsten Kamann
    • XML-Processing DOM 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-Parser def 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 DOMCategory def 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
    • Groovy Ma rkup Copyright 2006 Thorsten Kamann
    • GroovyMarkup Groovy bietet Unterstützung für die Arbeit mit Markup- Languages: XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's Copyright 2006 Thorsten Kamann
    • GroovyMarkup Groovy bietet Unterstützung für die Arbeit mit Markup- Languages: XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's Copyright 2006 Thorsten Kamann
    • GroovyMarkup Groovy bietet Unterstützung für die Arbeit mit Markup- Languages: XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's GroovyMarkup bietet eine einheitliche Schnittstelle Elemente sind Closures Attribute sind Maps Copyright 2006 Thorsten Kamann
    • GroovyMarkup Groovy bietet Unterstützung für die Arbeit mit Markup- Languages: XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's GroovyMarkup bietet eine einheitliche Schnittstelle Elemente sind Closures Attribute sind Maps Vollständige Integration anderer Groovy-Features Collections, Arrays, Conditions, ... Copyright 2006 Thorsten Kamann
    • GroovyMarkup (Beispiel) builder = new MarkupBuilder(writer) builder.person() { name(first:quot;Meganquot;, last:quot;Smithquot;) { age(quot;33quot;) } } Copyright 2006 Thorsten Kamann
    • GroovyMarkup (Beispiel) builder = new MarkupBuilder(writer) builder.person() { name(first:quot;Meganquot;, last:quot;Smithquot;) { age(quot;33quot;) } } <person> <name first=“Megan“ last=“Smith“> <age>33</age> </name> </person> Copyright 2006 Thorsten Kamann
    • GPath Copyright 2006 Thorsten Kamann
    • GPath Ist eine Expression-Language für Daten mit Baumstrukturen Copyright 2006 Thorsten Kamann
    • GPath Ist eine Expression-Language für Daten mit Baumstrukturen Copyright 2006 Thorsten Kamann
    • GPath Ist eine Expression-Language für Daten mit Baumstrukturen Implementierung für XML Copyright 2006 Thorsten Kamann
    • GPath Ist eine Expression-Language für Daten mit Baumstrukturen Implementierung für XML Pfade zu einem Element können spezifiziert werden a.b.c findet alle <c>-Elemente innerhalb aller <b> innerhalb aller <a> Copyright 2006 Thorsten Kamann
    • GPath Ist eine Expression-Language für Daten mit Baumstrukturen Implementierung für XML Pfade zu einem Element können spezifiziert werden a.b.c findet alle <c>-Elemente innerhalb aller <b> innerhalb aller <a> Auch Attribute können spezifiziert werden a[quot;@hrefquot;] -> findet alle href-Attribute in <a>- Elementen a.@href -> eine Alternativ-Syntax dazu Copyright 2006 Thorsten Kamann
    • Groovy Be a ns Copyright 2006 Thorsten Kamann
    • GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Copyright 2006 Thorsten Kamann
    • GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Customer.groovy: class Customer { int id String name } Copyright 2006 Thorsten Kamann
    • GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Customer.groovy: Customer.java: class Customer { public class Customer { int id private int id = 0; String name private String name; } public int getId(){ return id; } public void setId(int id){ this.id = id; } ... } Copyright 2006 Thorsten Kamann
    • GroovyBeans Regeln für Properties: Wenn eine Property als private gekennzeichnet ist, wird ein Java Field benutzt, um diese Property zu repräsentieren Copyright 2006 Thorsten Kamann
    • GroovyBeans Regeln für Properties: Wenn eine Property als public oder protected gekennzeichnet wird, werden Getter- und Setter- Methoden mit der gleichen Sichtbarkeit und ein Feld mit der Sichtbarkeit private auf Bytecode-Ebene erzeugt Copyright 2006 Thorsten Kamann
    • GroovyBeans Regeln für Properties: Wenn keine Getter- oder Setter-Methoden für Properties mit der Sichtbarkeit public oder protected deklariert wurden, werden fehlende Getter- und Setter-Methoden mit der gleichen Sichtbarkeit automatisch auf Bytecode- Ebene erzeugt Copyright 2006 Thorsten Kamann
    • GroovyBeans Regeln für Properties: Mit selbst deklarierten Getter- und Setter-Methoden können die von der Groovy-Runtime generierten Methoden überschrieben werden Copyright 2006 Thorsten Kamann
    • Re gEx Copyright 2006 Thorsten Kamann
    • Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Copyright 2006 Thorsten Kamann
    • Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert Copyright 2006 Thorsten Kamann
    • Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert =~ Create Matcher Copyright 2006 Thorsten Kamann
    • Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert =~ Create Matcher assert quot;cheesecheesequot; =~ /cheese/ Copyright 2006 Thorsten Kamann
    • Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert =~ Create Matcher assert quot;cheesecheesequot; =~ /cheese/ ==~ Matches Regex Copyright 2006 Thorsten Kamann
    • Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert =~ Create Matcher assert quot;cheesecheesequot; =~ /cheese/ ==~ Matches Regex assert quot;cheesecheesequot; ==~ /.*ees.*/ Copyright 2006 Thorsten Kamann
    • Gra ils Copyright 2006 Thorsten Kamann
    • Grails Grails ist ein Webapplication-Framework Copyright 2006 Thorsten Kamann
    • Grails Grails ist ein Webapplication-Framework Es vereinfacht die Entwicklung von Webanwendungen durch das Coding By Convention-Paradigma Copyright 2006 Thorsten Kamann
    • Grails Grails ist ein Webapplication-Framework Es vereinfacht die Entwicklung von Webanwendungen durch das Coding By Convention-Paradigma die Verwendung von Spring/Hibernate Copyright 2006 Thorsten Kamann
    • Grails Grails ist ein Webapplication-Framework Es vereinfacht die Entwicklung von Webanwendungen durch das Coding By Convention-Paradigma die Verwendung von Spring/Hibernate eigene GSP (Groovy Server Pages) mit dynamischen TagLibraries Copyright 2006 Thorsten Kamann
    • Grails (Screenshots) Copyright 2006 Thorsten Kamann
    • Grails (Screenshots) Copyright 2006 Thorsten Kamann
    • Grails (Screenshots) Copyright 2006 Thorsten Kamann
    • Grails (Screenshots) Copyright 2006 Thorsten Kamann
    • Grails Die zentrale Komponente ist die Domänenklasse (Entity) Copyright 2006 Thorsten Kamann
    • Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Copyright 2006 Thorsten Kamann
    • Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Anbindung an Enterprise-Systeme kann über SpringBeans erfolgen Copyright 2006 Thorsten Kamann
    • Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Anbindung an Enterprise-Systeme kann über SpringBeans erfolgen Als View-Technologie ist zur Zeit JSP und GSP vorgesehen Copyright 2006 Thorsten Kamann
    • Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Anbindung an Enterprise-Systeme kann über SpringBeans erfolgen Als View-Technologie ist zur Zeit JSP und GSP vorgesehen Eclipse Integration ist in Arbeit Copyright 2006 Thorsten Kamann
    • Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Anbindung an Enterprise-Systeme kann über SpringBeans erfolgen Als View-Technologie ist zur Zeit JSP und GSP vorgesehen Eclipse Integration ist in Arbeit Sehr leichte Integration in eine MDSD-Umgebung Copyright 2006 Thorsten Kamann
    • Gorm Copyright 2006 Thorsten Kamann
    • GORM Ist der OR-Mapper für Grails Copyright 2006 Thorsten Kamann
    • GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Copyright 2006 Thorsten Kamann
    • GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Die Konfiguration wird komplett in den Groovy-Files vorgenommen Copyright 2006 Thorsten Kamann
    • GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Die Konfiguration wird komplett in den Groovy-Files vorgenommen Alle Features von Hibernate werden unterstützt Copyright 2006 Thorsten Kamann
    • GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Die Konfiguration wird komplett in den Groovy-Files vorgenommen Alle Features von Hibernate werden unterstützt In Verbindung mit Spring ist es möglich, Transaktionen in Grails-Anwendungen flexibel zu verwalten Copyright 2006 Thorsten Kamann
    • Groovle ts Copyright 2006 Thorsten Kamann
    • Groovlets Groovlets sind Java-Servlets in Groovy geschrieben Copyright 2006 Thorsten Kamann
    • Groovlets Groovlets sind Java-Servlets in Groovy geschrieben Es gibt ein GroovyServlet, welches Groovy-Skripte automatisch kompiliert, ausführt und cached Copyright 2006 Thorsten Kamann
    • Groovlets Groovlets sind Java-Servlets in Groovy geschrieben Es gibt ein GroovyServlet, welches Groovy-Skripte automatisch kompiliert, ausführt und cached Copyright 2006 Thorsten Kamann
    • Groovlets Implizite Variablen: Variable Gebunden an Bemerkung Request ServletRequest Response ServletResponse Context ServletContext Application ServletContext Session getSession(false) Out response.getWriter() Können nicht re-assigned werden Cout response.getOutputStream() Können nicht re-assigned werden Html new MarkupBuilder(out) Können nicht re-assigned werden Copyright 2006 Thorsten Kamann
    • GS QL Copyright 2006 Thorsten Kamann
    • GSQL Vereinfacht das Arbeiten mit SQL Copyright 2006 Thorsten Kamann
    • GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Copyright 2006 Thorsten Kamann
    • GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Closures bieten komfortables Arbeiten mit den ResultSets Copyright 2006 Thorsten Kamann
    • GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Closures bieten komfortables Arbeiten mit den ResultSets def sql = Sql.newInstance(quot;urlquot;, quot;userquot;,quot;pwdquot;, quot;driverquot;) sql.eachRow(quot;select * from FOOD where type=${foo}quot;) { println quot;Gromit likes ${it.name}quot; } Copyright 2006 Thorsten Kamann
    • GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Closures bieten komfortables Arbeiten mit den ResultSets def sql = Sql.newInstance(quot;urlquot;, quot;userquot;,quot;pwdquot;, quot;driverquot;) def food = sql.dataSet('FOOD') def cheese = food.findAll { it.type == 'cheese' } cheese.each { println quot;Eat ${it.name}quot; } Copyright 2006 Thorsten Kamann
    • Ant- S c ripting Copyright 2006 Thorsten Kamann
    • Ant-Scripting Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzen Copyright 2006 Thorsten Kamann
    • Ant-Scripting Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzen ant = new AntBuilder() ant.echo(message:quot;mapping it via attribute!quot;) ant.echo(quot;Hello World!quot;) Copyright 2006 Thorsten Kamann
    • Ant-Scripting Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzen ant = new AntBuilder() try{ ant.javac(srcdir:quot;/srcquot;, destdir:quot;/dest/quot; ) }catch(Throwable thr){ ant.mail(mailhost:quot;hostquot;, subject:quot;build failurequot;){ from(address:quot;buildmaster@anywhere.comquot;), to(address:quot;dev-team@anywhere.comquot;) message(quot;Unable to compile sources.quot;) } } Copyright 2006 Thorsten Kamann
    • Groovy Te mpla te s Copyright 2006 Thorsten Kamann
    • Groovy Templates Bietet ein Framework, um eine eigene Template-Engine zu entwickeln Copyright 2006 Thorsten Kamann
    • Groovy Templates Bietet ein Framework, um eine eigene Template-Engine zu entwickeln Enthalten ist die SimpleTemplateEngine, die JSP-like mittels Scripts, Scriptlets und EL parameterisierte Texte generieren kann Copyright 2006 Thorsten Kamann
    • Groovy Templates (Beispiel) def text = 'Dear quot;${firstname} ${lastname}quot;,nSo nice to meet you in <% print city %>.' def binding = [quot;firstnamequot;:quot;Peterquot;, quot;lastnamequot;:quot;Schulzequot;, quot;cityquot;:quot;Dortmundquot;] def engine = new SimpleTemplateEngine() template = engine.createTemplate(text).make(binding) def result = 'Dear quot;Peter Schulzequot;,nSo nice to meet you in Dortmund.' assert result == template.toString() Copyright 2006 Thorsten Kamann
    • S ic he rhe it Copyright 2006 Thorsten Kamann
    • Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden Copyright 2006 Thorsten Kamann
    • Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden Copyright 2006 Thorsten Kamann
    • Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden security.policy: grant codeBase quot;file:/serverCodeBase/restrictedClientquot; { permission java.security.AllPermission; }; Copyright 2006 Thorsten Kamann
    • Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden security.policy: grant codeBase quot;file:/serverCodeBase/restrictedClientquot; { permission java.security.AllPermission; }; Java-Code: new GroovyShell().evaluate( new GroovyCodeSource( clientscriptStr, quot;RestrictedScriptquot;, quot;/serverCodeBase/restrictedClientquot;) Copyright 2006 Thorsten Kamann
    • S c riptom Copyright 2006 Thorsten Kamann
    • Scriptom Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automation Copyright 2006 Thorsten Kamann
    • Scriptom Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automation import org.codehaus.groovy.scriptom.ActiveXProxy def explorer = new ActiveXProxy(quot;InternetExplorer.Applicationquot;) explorer.Visible = true explorer.AddressBar = true explorer.Navigate(quot;http://www.itemis.de/quot;) Copyright 2006 Thorsten Kamann
    • Scriptom Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automation import org.codehaus.groovy.scriptom.ActiveXProxy import java.io.File def word = new ActiveXProxy(quot;Word.Applicationquot;) word.Documents.Open(new File(args[0]).canonicalPath) word.ActiveDocument.SaveAs(new File(args[0] - quot;.docquot; + quot;.htmlquot;).canonicalPath, 8) word.Quit() Copyright 2006 Thorsten Kamann
    • We ite re Module Copyright 2006 Thorsten Kamann
    • Weitere Module Gant Gant ist ein Build-Tool auf Basis von Ant. Anstatt XML zu verwenden, wird ein Groovy-Dialekt benutzt, um die Ant- Targets und -Tasks zu konfigurieren. Copyright 2006 Thorsten Kamann
    • Weitere Module Google Data Support Google bietet den Zugriff auf seine Services. Mit Google Data Support wird der Zugriff darauf wesentlich vereinfacht. Copyright 2006 Thorsten Kamann
    • Weitere Module Gram Gram unterstützt bei der Verwendung von Xdoclet-Tags und Annotations in Groovy-Scripts. Copyright 2006 Thorsten Kamann
    • Weitere Module Groovy Jabber-RPC Damit können XML-RPC Aufrufe über das Jabber-Protokol abgesetzt werden. Bietet die Möglichkeit sowohl einen Server als auch einen Client zu erstellen. Copyright 2006 Thorsten Kamann
    • Weitere Module Groovy Monkey Groovy Monkey ist ein Port des Eclipse-Monkey Projekts. Damit kann Eclipse über Groovy-Scripts automatisiert werden. Copyright 2006 Thorsten Kamann
    • Weitere Module Groovy SOAP Damit können sowohl ein Soap-Server als auch ein Soap- Client erstellt werden. Copyright 2006 Thorsten Kamann
    • Weitere Module GroovySWT Auch SWT-UI's können mittels Groovy erstellt werden. Copyright 2006 Thorsten Kamann
    • Weitere Module Process Wird auch GrooSH – Groovy Shell – genannt. Hiermit ist es möglich Funktionen einer (Unix-)Shell nachzubilden. Copyright 2006 Thorsten Kamann
    • Weitere Module XMLRPC Ermöglicht XML-RPC Calls an lokale oder enfernte RPC- Server abzusetzen. Copyright 2006 Thorsten Kamann
    • Te s ting Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing Copyright 2006 Thorsten Kamann
    • Testing - jUnit-Testing Basiert auf jUnit und erweitert die Asserts Copyright 2006 Thorsten Kamann
    • Testing - jUnit-Testing Basiert 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
    • IDE S upport Copyright 2006 Thorsten Kamann
    • IDE-Support Copyright 2006 Thorsten Kamann
    • IDE-Support Copyright 2006 Thorsten Kamann
    • IDE-Support Copyright 2006 Thorsten Kamann
    • IDE-Support Copyright 2006 Thorsten Kamann
    • IDE-Support Copyright 2006 Thorsten Kamann
    • IDE-Support Copyright 2006 Thorsten Kamann
    • IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Copyright 2006 Thorsten Kamann
    • IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Copyright 2006 Thorsten Kamann
    • IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Nützlich für Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks) Copyright 2006 Thorsten Kamann
    • IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Nützlich für Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks) Erstellen von LaunchManagern Copyright 2006 Thorsten Kamann
    • IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Nützlich für Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks) Erstellen von LaunchManagern Prototyping von Plugins Copyright 2006 Thorsten Kamann
    • IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Nützlich für Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks) Erstellen von LaunchManagern Prototyping von PlugIns Basiert auf dem Eclipse-Job API Copyright 2006 Thorsten Kamann
    • Zus a mme n- Fa s s ung Copyright 2006 Thorsten Kamann
    • Zusammenfassung Groovy ist schon sehr weit fortgeschritten Copyright 2006 Thorsten Kamann
    • Zusammenfassung Groovy ist schon sehr weit fortgeschritten Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die meisten Anwendungsfälle abdecken Copyright 2006 Thorsten Kamann
    • Zusammenfassung Groovy ist schon sehr weit fortgeschritten Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die meisten Anwendungsfälle abdecken Durch die Standardisierung (JSR 241) ist auch eine gewisse Zukunftssicherheit gewährleistet Copyright 2006 Thorsten Kamann
    • Zusammenfassung Groovy ist schon sehr weit fortgeschritten Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die meisten Anwendungsfälle abdecken Durch die Standardisierung (JSR 241) ist auch eine gewisse Zukunftssicherheit gewährleistet Groovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit der Java-Syntax bestehen Copyright 2006 Thorsten Kamann
    • Zusammenfassung Groovy ist schon sehr weit fortgeschritten Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die meisten Anwendungsfälle abdecken Durch die Standardisierung (JSR 241) ist auch eine gewisse Zukunftssicherheit gewährleistet Groovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit der Java-Syntax bestehen Neben dem leistungsfähigen API von Groovy steht die gesamte API von Java zur Verfügung Copyright 2006 Thorsten Kamann
    • Links Copyright 2006 Thorsten Kamann
    • Links Groovy Homepage http://groovy.codehaus.org/ JSR 241 http://www.jcp.org/en/jsr/detail?id=241 Grails http://grails.codehaus.org/ Artikel über Groovy http://groovy.codehaus.org/Articles Webseite des Autors http://www.planetes.de/thorsten-kamann Copyright 2006 Thorsten Kamann