Groovy: Programme kompilieren und starten

Aus Wikibooks

Eine der Besonderheiten von Groovy ist, dass Sie die in dieser Sprache erstellten Programme sowohl als Skript, also direkt aus dem Quellprogramm heraus, als auch in kompilierter Form verwenden können. Dies wollen wir mit dem obigen Verzeichnis-List-Programm ausprobieren.

Ein kompiliertes Groovy-Skript[Bearbeiten]

Jedes Groovy-Programm, das sich als Skript ausführen lässt, kann auch kompiliert werden. Wenn Sie mit der Konsole noch immer in dem Verzeichnis stehen, in dem sich das im vorigen Abschnitt erstellte Skript gdir.groovy befindet, dann rufen Sie doch einmal den Groovy-Compiler auf:

> groovyc SystemProperties.groovy

Es geschieht nichts weiter, als dass nach kurzer Zeit die Eingabeaufforderung wieder erscheint. Allerdings befindet sich nun in Ihrem Verzeichnis eine neue Datei namens SystemProperties.class, und dies ist tatsächlich ein mit Hilfe der Java-Laufzeitumgebung ausführbares Java-Bytecode-Programm. Wenn Sie die Java Virtual Machine (JVM) im Pfad haben, können Sie das Programm direkt mit Java starten. Allerdings muss sich die Groovy-Laufzeitumgebung im Klassenpfad befinden, daher ist der Aufruf etwas länglich:

> java -cp %GROOVY_HOME%\embeddable\groovy-all-1.1.jar;. SystemProperties
user.country=DE
user.dir=C:\workspace\groovy\Kap-01\src
...

Tatsächlich hat der Groovy-Compiler das Skript in eine Java-Klasse übersetzt, die denselben Namen hat wie die Skriptdatei, also SystemProperties. Außerdem hat er ihr noch eine main()-Methode hinzugefügt, damit sie direkt gestartet werden kann.

Da Groovy die bei Skripten Klassennamen aus dem Dateinamen der Quelldatei generiert, müssen Sie etwas vorsichtig bei der Benennung der Datei sein. Der Dateiname muss ein in Groovy gültiger Bezeichner sein, darf nicht mit einem reservierten Wort wie for oder class übereinstimmen und sollte auch sonst keinen Anlass zu Namenskonflikten bieten.

Eine kompilierte Groovy-Klasse[Bearbeiten]

Ändern Sie das Programm SystemProperties.groovy mit dem Text-Editor in der folgenden Weise und speichern Sie es unter dem Namen SystemPropertiesAnzeiger.groovy ab.

class SystemPropertiesAnzeiger {
  static void main (args) {
    def prefix = args.length ? args[0] : ""
    def entries = []
    for (e in System.properties) {
      if (e.key.startsWith(prefix)) entries.add(e)
    }
    entries.sort { e1,e2 -> e1.key.compareTo(e2.key) }
    for (entry in entries) {
      println entry
    }
  }
}

Der einzige Unterschied besteht darin, dass wir das Programm jetzt in der main()-Methode einer Klasse haben und dass die beiden Variablen prefix und entries jetzt mit def deklariert sind. Letzteres ist nötig, weil es jetzt lokale Variablen der Methode sind, die auch in Groovy deklariert sein müssen – allerdings bleiben sie mit der def-Deklaration untypisiert.

Kompilieren wir die Klasse wie gehabt:

> groovyc SystemPropertiesAnzeiger.groovy

Wiederum entsteht eine Java-Klassendatei namens SystemPropertiesAnzeiger.class, die wir auch gleich mit Hilfe der JVM starten:

 > java -cp "%GROOVY_HOME%\embeddable\groovy-all-1.1.jar;." SystemPropertiesAnzeiger
 user.country=DE
 user.dir=C:\workspace\groovy\Kap-01\src
 ...

Alles wie gehabt, nur dass inzwischen ein paar mehr Dateien in unserem Verzeichnis stehen. Der Groovy-Compiler hat es jetzt etwas leichter, denn er braucht jetzt keine Klasse und keine main()-Methode mehr zu generieren, da wir diese schon selbst geschrieben hatten.

Und lässt sich das Programm SystemPropertiesAnzeiger.groovy nun nicht mehr als Skript ausführen? Doch, auch das ist möglich, wie ein kurzer Versuch zeigt:

> groovy SystemPropertiesAnzeiger.groovy

Dies funktioniert genauso. Groovy kompiliert die Klasse einfach schnell und führt sie gleich aus, ohne sie irgendwo als Klassendatei zu speichern. Mit anderen Worten: Sie können durchaus eine Groovy-Klasse wie ein Skript und ein Groovy-Skript wie eine Klasse behandeln. Für Groovy macht dies keinen großen Unterschied, vielmehr ist es eher eine Frage der praktischen Erfordernisse, wie sie die Sprache benutzen: Während für das schnelle kleine Hilfs- oder Testprogramm ein Skript ausreicht, ist in größeren Projekten, bei denen Wiederverwendung und Strukturierung ein Thema ist, eher das Arbeiten mit ordentlichen Klassen angesagt.

Sie haben Groovy auf Ihrem Rechner installiert und wissen nun, wie Sie damit Programme schreiben und starten können. Das reicht fast schon aus, um mit Groovy arbeiten zu können, denn in vielen Fällen reichen Ihre Java-Kenntnisse aus, um Groovy-Programme zu schreiben. Es gibt aber auch ein paar Abweichungen zwischen der Java- und der Groovy-Sprachsyntax, die Sie kennen müssen. Diese kleinen Unterschiede und die vielen Vereinfachungen und zusätzlichen sprachlichen Mittel von Groovy sind das Thema des nächsten Kapitels.