| « Tutorial: Grails, Plugins und praktische Java-Bibliotheken | Tutorial: Integration von Google Desktop Search in Java-Anwendungen » |
Groovy/Grails als Ergänzung zu Java
Nach einigen Experimenten mit NB 6.5 M1 und Ruby on Rails habe ich mir auch mal Grails angeschaut. Und der Einstieg fiel mir mir wesentlich leichter als bei Ruby. Das liegt sicher daran, dass Groovy und Java viel enger verwandt sind. Es war auch einfacher, eine Groovy/Grails-Applikation zum Laufen zu bringen, obwohl die Ruby-Integration in Netbeans weiter fortgeschritten ist.
Inzwischen läuft mein erstes Web-Tool auf Grundlage von Grails erfolgreich, und die Entwicklung hat nicht mehr als zwei Nachmittage gedauert. Und das ohne jegliche Vorkenntnis von Groovy. Das war schon eine verblüffende Erfahrung!
Was mir an Groovy besonders gefällt ist die kompaktere und aussagekräftigere Syntax, und die reibungslose Integration in Java. Dazu ein paar Beispiele…
Fortsetzung:
Wir starten mit einem simplen Groovy Script:
Code:
println "Hello World!" |
Speichert man dieses Script unter “Greet.groovy", kann man es in eine Java-Klasse (!) kompilieren und aus Java heraus so starten:
Code:
Greet g=new Greet(); | |
g.run(); |
Aus dem Dateinamen des Scripts ist also einfach eine Klasse mit einer “run"-Methode geworden.
Das Groovy Script muss aber nicht zwingend kompiliert werden, Java kann auch direkt auf die Quelldatei zugreifen und diese ausführen. Dazu schreibt man in Java:
Code:
try { | |
String[] roots = new String[]{"D:/DeinPfadZumScript"}; | |
GroovyScriptEngine gse = new GroovyScriptEngine(roots); | |
Binding binding = new Binding(); | |
gse.run("Greet.groovy", binding); | |
} catch (Exception ex) { | |
ex.printStackTrace(); | |
} |
Das sind schon ein paar Zeilen mehr: Durch den Zugriff aufs Dateisystem kann natürlich eine Exception auftreten. Die GroovyScriptEngine erwartet für den Start eines Scripts außerdem noch ein Binding, das optional Parameter enthalten kann. Man könnte z.B. eine Zeile
Code:
binding.setVariable("name", "World"); |
ergänzen, um dem Script den Wert der Variable “name” mitzuteilen.
Ein etwas flexibleres Groovy-Script würde diese Variable so entgegennehmen:
Code:
println "Hello ${name}" |
Und wie funktioniert es in der anderen Richtung, also aus Groovy heraus Java-Klassen aufrufen? Eigentlich genau so, wie man es sich vorstellt. Nehmen wir eine banale Java-Klasse:
Code:
import java.text.DateFormat; | |
import java.util.Date; | |
| |
public class DateCalc { | |
| |
public String getMyDate() { | |
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); | |
Date now=new Date(); | |
return df.format(now); | |
} | |
} |
… und nutzen wir sie in Groovy:
Code:
DateCalc d=new DateCalc() | |
String result=d.getMyDate(); | |
println result.plus(' is a beautiful day') |
Die Integration ist aber nur ein erster Schritt. Die richtigen Stärken von Groovy kommen zum Vorschein, wenn man mit Closures arbeitet, was Java (noch) nicht beherrscht. Ich lese jetzt erstmal Groovy im Einsatz - und füge Groovy sicher auf Dauer meinem “Werkzeugkasten” hinzu.
Eine nette Starthilfe gibt’s hier:
PLEAC Groovy (Groovy Cookbook)
Zum Schluss noch ein Appetithäppchen - ein minimalistischer RSS-Reader in Groovy:
Code:
public fetch(String url){ | |
def entries=new XmlSlurper().parse(url) | |
for(entry in entries.channel.item){ | |
println "${entry.pubDate}".center(50,'-') | |
println "${entry.title}" | |
println "${entry.enclosure.@url}" | |
} | |
} | |
| |
fetch 'http://hansamann.podspot.de/rss' |
Noch kein Feedback
Kommentare sind für diesen Eintrag deaktiviert.