Groovy - Rocks or Not?

1.698 Aufrufe

Veröffentlicht am

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.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.698
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
38
Aktionen
Geteilt
0
Downloads
14
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Groovy - Rocks or Not?

  1. 1. von und mit Thorsten Kamann Copyright 2006 Thorsten Kamann
  2. 2. 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
  3. 3. Einle itung Copyright 2006 Thorsten Kamann
  4. 4. Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Copyright 2006 Thorsten Kamann
  5. 5. 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
  6. 6. 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
  7. 7. 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
  8. 8. Was ist Groovy? Eine dynamische Sprache Copyright 2006 Thorsten Kamann
  9. 9. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Copyright 2006 Thorsten Kamann
  10. 10. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Copyright 2006 Thorsten Kamann
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. Ge tting S ta rte d Copyright 2006 Thorsten Kamann
  16. 16. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Copyright 2006 Thorsten Kamann
  17. 17. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Copyright 2006 Thorsten Kamann
  18. 18. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Setzen der Umgebungsvariable GROOVY_HOME Copyright 2006 Thorsten Kamann
  19. 19. 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
  20. 20. 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
  21. 21. Getting Started Copyright 2006 Thorsten Kamann
  22. 22. Embe dding Copyright 2006 Thorsten Kamann
  23. 23. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  24. 24. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  25. 25. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  26. 26. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  27. 27. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  28. 28. Embedding mit dem BSF Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache in Java-Anwendungen einzubinden Copyright 2006 Thorsten Kamann
  29. 29. 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
  30. 30. Embedding mit GroovyShell GroovyShell bietet die Möglichkeit des Ein- und Auslesens von Variablen mittels des Binding-Objekts Copyright 2006 Thorsten Kamann
  31. 31. 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
  32. 32. Embedding mit GroovyClassLoader Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methoden Copyright 2006 Thorsten Kamann
  33. 33. 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
  34. 34. 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
  35. 35. 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
  36. 36. 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
  37. 37. Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können Copyright 2006 Thorsten Kamann
  38. 38. 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
  39. 39. 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
  40. 40. 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
  41. 41. Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Copyright 2006 Thorsten Kamann
  42. 42. 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
  43. 43. 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
  44. 44. 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
  45. 45. 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
  46. 46. 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
  47. 47. 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
  48. 48. 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
  49. 49. Embedding in Linux Groovy kann direkt von der Konsole mittels groovy script.groovy [arguments] ausgeführt werden Copyright 2006 Thorsten Kamann
  50. 50. 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
  51. 51. Die S ynta x Copyright 2006 Thorsten Kamann
  52. 52. Die Syntax: Closures Closures sind anonyme Codeblöcke Copyright 2006 Thorsten Kamann
  53. 53. Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück Copyright 2006 Thorsten Kamann
  54. 54. Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen Copyright 2006 Thorsten Kamann
  55. 55. 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
  56. 56. 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
  57. 57. 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
  58. 58. Die Syntax: Closures (Beispiele) Beispiele: { item++ } Copyright 2006 Thorsten Kamann
  59. 59. Die Syntax: Closures (Beispiele) Beispiele: { name -> println name } Copyright 2006 Thorsten Kamann
  60. 60. Die Syntax: Closures (Beispiele) Beispiele: {String x, int y -> println quot;hey $x the value is $yquot;} Copyright 2006 Thorsten Kamann
  61. 61. Die Syntax: Closures (Beispiele) Beispiele: { reader -> while (true) { line = reader.readLine() } } Copyright 2006 Thorsten Kamann
  62. 62. Die Syntax – Collections (Listen) Listen erzeugen immer eine Instanz von java.util.List Copyright 2006 Thorsten Kamann
  63. 63. 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
  64. 64. 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
  65. 65. Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Copyright 2006 Thorsten Kamann
  66. 66. Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Es gibt inklusive und exklusive Ranges Copyright 2006 Thorsten Kamann
  67. 67. 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
  68. 68. 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
  69. 69. Die Syntax: Collections (Maps) Maps basieren auf einer Implementierung von java.util.Map Copyright 2006 Thorsten Kamann
  70. 70. 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
  71. 71. 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
  72. 72. Die Syntax: Collections (Expando) Expandos ermöglichen die Erzeugung von dynamischen Objekten Copyright 2006 Thorsten Kamann
  73. 73. 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
  74. 74. Die Syntax: Collections (each) Iterator mittels einer Closure Copyright 2006 Thorsten Kamann
  75. 75. Die Syntax: Collections (each) Iterator mittels einer Closure [1, 2, 3].each { item -> print quot;${item}-quot; } Copyright 2006 Thorsten Kamann
  76. 76. Die Syntax: Collections (collect) Erzeugt eine neue Liste mit dem Ergebnis der Closure Copyright 2006 Thorsten Kamann
  77. 77. 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
  78. 78. Die Syntax: Collections (find) Gibt das erste Element einer Collection zurück, welches der Expression in der Closure entspricht Copyright 2006 Thorsten Kamann
  79. 79. 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
  80. 80. Die Syntax: Collections (findAll) Gibt eine Collection mit allen Elementen, die denen der Expression in der Closure entsprechen, zurück Copyright 2006 Thorsten Kamann
  81. 81. 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
  82. 82. Die Syntax: Collections (inject) Fügt einen zusätzlichen Wert zu einer Iteration hinzu Copyright 2006 Thorsten Kamann
  83. 83. 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
  84. 84. Die Syntax: Collections (every) Gibt true zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechen Copyright 2006 Thorsten Kamann
  85. 85. 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
  86. 86. 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
  87. 87. 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
  88. 88. 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
  89. 89. 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
  90. 90. 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
  91. 91. 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
  92. 92. 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
  93. 93. 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
  94. 94. Die Syntax: Collections (join) Fügt einen String zu den Werten einer Collection hinzu Copyright 2006 Thorsten Kamann
  95. 95. 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
  96. 96. 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
  97. 97. 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
  98. 98. 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
  99. 99. 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
  100. 100. Die Syntax: Looping (while) Groovy unterstützt das aus Java bekannte while{..} Konstrukt Copyright 2006 Thorsten Kamann
  101. 101. 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
  102. 102. Die Syntax: Looping (for) Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections Copyright 2006 Thorsten Kamann
  103. 103. 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
  104. 104. 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
  105. 105. Die Syntax: Looping (each) each ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglich Copyright 2006 Thorsten Kamann
  106. 106. 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
  107. 107. 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
  108. 108. Die Syntax: Looping (eachWithIndex) Unterscheidet sich vom Looping mit each dadurch, dass ein Index mitgeführt wird Copyright 2006 Thorsten Kamann
  109. 109. 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
  110. 110. 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
  111. 111. Die Syntax: Conditions (if...else) Groovy unterstützt die aus Java bekannten if...else Konstrukte Copyright 2006 Thorsten Kamann
  112. 112. 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
  113. 113. 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
  114. 114. 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
  115. 115. XML Proc e s s ing Copyright 2006 Thorsten Kamann
  116. 116. XML-Processing Groovy bietet reichhaltige Unterstützung für das XML- Processing Copyright 2006 Thorsten Kamann
  117. 117. XML-Processing Copyright 2006 Thorsten Kamann
  118. 118. XML-Processing Copyright 2006 Thorsten Kamann
  119. 119. XML-Processing Copyright 2006 Thorsten Kamann
  120. 120. XML-Processing Copyright 2006 Thorsten Kamann
  121. 121. 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
  122. 122. 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
  123. 123. 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
  124. 124. 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
  125. 125. 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
  126. 126. Groovy Ma rkup Copyright 2006 Thorsten Kamann
  127. 127. 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
  128. 128. 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
  129. 129. 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
  130. 130. 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
  131. 131. GroovyMarkup (Beispiel) builder = new MarkupBuilder(writer) builder.person() { name(first:quot;Meganquot;, last:quot;Smithquot;) { age(quot;33quot;) } } Copyright 2006 Thorsten Kamann
  132. 132. 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
  133. 133. GPath Copyright 2006 Thorsten Kamann
  134. 134. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Copyright 2006 Thorsten Kamann
  135. 135. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Copyright 2006 Thorsten Kamann
  136. 136. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Implementierung für XML Copyright 2006 Thorsten Kamann
  137. 137. 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
  138. 138. 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
  139. 139. Groovy Be a ns Copyright 2006 Thorsten Kamann
  140. 140. GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Copyright 2006 Thorsten Kamann
  141. 141. GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Customer.groovy: class Customer { int id String name } Copyright 2006 Thorsten Kamann
  142. 142. 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
  143. 143. 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
  144. 144. 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
  145. 145. 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
  146. 146. 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
  147. 147. Re gEx Copyright 2006 Thorsten Kamann
  148. 148. Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Copyright 2006 Thorsten Kamann
  149. 149. 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
  150. 150. 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
  151. 151. 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
  152. 152. 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
  153. 153. 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
  154. 154. Gra ils Copyright 2006 Thorsten Kamann
  155. 155. Grails Grails ist ein Webapplication-Framework Copyright 2006 Thorsten Kamann
  156. 156. Grails Grails ist ein Webapplication-Framework Es vereinfacht die Entwicklung von Webanwendungen durch das Coding By Convention-Paradigma Copyright 2006 Thorsten Kamann
  157. 157. 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
  158. 158. 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
  159. 159. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  160. 160. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  161. 161. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  162. 162. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  163. 163. Grails Die zentrale Komponente ist die Domänenklasse (Entity) Copyright 2006 Thorsten Kamann
  164. 164. 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
  165. 165. 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
  166. 166. 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
  167. 167. 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
  168. 168. 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
  169. 169. Gorm Copyright 2006 Thorsten Kamann
  170. 170. GORM Ist der OR-Mapper für Grails Copyright 2006 Thorsten Kamann
  171. 171. GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Copyright 2006 Thorsten Kamann
  172. 172. 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
  173. 173. 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
  174. 174. 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
  175. 175. Groovle ts Copyright 2006 Thorsten Kamann
  176. 176. Groovlets Groovlets sind Java-Servlets in Groovy geschrieben Copyright 2006 Thorsten Kamann
  177. 177. 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
  178. 178. 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
  179. 179. 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
  180. 180. GS QL Copyright 2006 Thorsten Kamann
  181. 181. GSQL Vereinfacht das Arbeiten mit SQL Copyright 2006 Thorsten Kamann
  182. 182. GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Copyright 2006 Thorsten Kamann
  183. 183. GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Closures bieten komfortables Arbeiten mit den ResultSets Copyright 2006 Thorsten Kamann
  184. 184. 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
  185. 185. 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
  186. 186. Ant- S c ripting Copyright 2006 Thorsten Kamann
  187. 187. Ant-Scripting Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzen Copyright 2006 Thorsten Kamann
  188. 188. 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
  189. 189. 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
  190. 190. Groovy Te mpla te s Copyright 2006 Thorsten Kamann
  191. 191. Groovy Templates Bietet ein Framework, um eine eigene Template-Engine zu entwickeln Copyright 2006 Thorsten Kamann
  192. 192. 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
  193. 193. 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
  194. 194. S ic he rhe it Copyright 2006 Thorsten Kamann
  195. 195. Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden Copyright 2006 Thorsten Kamann
  196. 196. Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden Copyright 2006 Thorsten Kamann
  197. 197. 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
  198. 198. 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
  199. 199. S c riptom Copyright 2006 Thorsten Kamann
  200. 200. Scriptom Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automation Copyright 2006 Thorsten Kamann
  201. 201. 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
  202. 202. 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
  203. 203. We ite re Module Copyright 2006 Thorsten Kamann
  204. 204. 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
  205. 205. 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
  206. 206. Weitere Module Gram Gram unterstützt bei der Verwendung von Xdoclet-Tags und Annotations in Groovy-Scripts. Copyright 2006 Thorsten Kamann
  207. 207. 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
  208. 208. 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
  209. 209. Weitere Module Groovy SOAP Damit können sowohl ein Soap-Server als auch ein Soap- Client erstellt werden. Copyright 2006 Thorsten Kamann
  210. 210. Weitere Module GroovySWT Auch SWT-UI's können mittels Groovy erstellt werden. Copyright 2006 Thorsten Kamann
  211. 211. Weitere Module Process Wird auch GrooSH – Groovy Shell – genannt. Hiermit ist es möglich Funktionen einer (Unix-)Shell nachzubilden. Copyright 2006 Thorsten Kamann
  212. 212. Weitere Module XMLRPC Ermöglicht XML-RPC Calls an lokale oder enfernte RPC- Server abzusetzen. Copyright 2006 Thorsten Kamann
  213. 213. Te s ting Copyright 2006 Thorsten Kamann
  214. 214. Testing Copyright 2006 Thorsten Kamann
  215. 215. Testing Copyright 2006 Thorsten Kamann
  216. 216. Testing Copyright 2006 Thorsten Kamann
  217. 217. Testing Copyright 2006 Thorsten Kamann
  218. 218. Testing Copyright 2006 Thorsten Kamann
  219. 219. Testing Copyright 2006 Thorsten Kamann
  220. 220. Testing Copyright 2006 Thorsten Kamann
  221. 221. Testing Copyright 2006 Thorsten Kamann
  222. 222. Testing Copyright 2006 Thorsten Kamann
  223. 223. Testing Copyright 2006 Thorsten Kamann
  224. 224. Testing Copyright 2006 Thorsten Kamann
  225. 225. Testing Copyright 2006 Thorsten Kamann
  226. 226. Testing Copyright 2006 Thorsten Kamann
  227. 227. Testing Copyright 2006 Thorsten Kamann
  228. 228. Testing - jUnit-Testing Basiert auf jUnit und erweitert die Asserts Copyright 2006 Thorsten Kamann
  229. 229. 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
  230. 230. IDE S upport Copyright 2006 Thorsten Kamann
  231. 231. IDE-Support Copyright 2006 Thorsten Kamann
  232. 232. IDE-Support Copyright 2006 Thorsten Kamann
  233. 233. IDE-Support Copyright 2006 Thorsten Kamann
  234. 234. IDE-Support Copyright 2006 Thorsten Kamann
  235. 235. IDE-Support Copyright 2006 Thorsten Kamann
  236. 236. IDE-Support Copyright 2006 Thorsten Kamann
  237. 237. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Copyright 2006 Thorsten Kamann
  238. 238. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Copyright 2006 Thorsten Kamann
  239. 239. 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
  240. 240. 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
  241. 241. 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
  242. 242. 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
  243. 243. Zus a mme n- Fa s s ung Copyright 2006 Thorsten Kamann
  244. 244. Zusammenfassung Groovy ist schon sehr weit fortgeschritten Copyright 2006 Thorsten Kamann
  245. 245. 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
  246. 246. 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
  247. 247. 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
  248. 248. 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
  249. 249. Links Copyright 2006 Thorsten Kamann
  250. 250. 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

×