advertisement

Groovy - Rocks or Not?

50 %
50 %
advertisement
Information about Groovy - Rocks or Not?

Published on January 22, 2008

Author: thorque

Source: slideshare.net

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

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

Add a comment

Related pages

groovy | Better Software and beyond... | Page 4

Vortragsreihe Dortmund 23.10.2006: Groovy – Rocks or Not? Posted by thorque on October 23, ... Mit Groovy ist eine Scriptsprache entwickelt worden, ...
Read more

Groovy Goodness: Restricting Script Syntax With ...

... Restricting Script Syntax With SecureASTCustomizer ... are not allowed: this.println(Groovy rocks ... Groovy rocks ' s ...
Read more

Groovy Rock Drum Loop 110 bpm - YouTube

Groovy Rock Drum Loop 110 bpm https: ... This feature is not available right now. ... Funky Rock Drum Beat 100 BPM Backing Track - Duration: ...
Read more

Groovy Rocks! Most of the Time :) | Beyond Java

XML processing rocks! ... No matter whether this is true or not, a Groovy programmer has to accept ... 2 thoughts on “ Groovy Rocks! Most of the Time :) ...
Read more

The Grails Framework

A powerful Groovy-based web application framework for the JVM. Grails is a powerful web framework, for the Java platform aimed at multiplying ...
Read more

Groovy Rock #3 Drum Loop 120 bpm - YouTube

Groovy Rock #3 Drum Loop 120 bpm https://youtu.be/eh4y7zWBThw Feel free to use this for jamming, practicing, composing or whatever. Let me know ...
Read more

Why Groovy Scripting rocks : Use Case Alfresco - CONTENTREICH

Why Groovy Scripting rocks : Use Case Alfresco. 17. ... So effectively, you just replace Javascript with Groovy – not more and not less. Pingback: ...
Read more

Groovy - Wikipedia, the free encyclopedia

Groovy (or, less commonly, "groovie" or "groovey") is a slang colloquialism popular during the 1960s and 1970s. It is roughly synonymous with words such as ...
Read more