Groovy Shell Scripting – Java++ für die Shell – Teil 1

Von Georg Berky
1 Kommentar
Groovy Shell Scripting

In der Serie „Groovy Shell Scripting“ zeigen wir euch, wie man die Programmiersprache Groovy in einer unerwarteten Umgebung einsetzen kann, nämlich auf der Kommandozeile. Groovy ist eine dynamische Sprache auf der JVM und glänzte schon einige Jahre vor Java mit Features wie funktionaler Programmierung oder Literals für oft benutzte Datenstrukturen wie List und Map.

Der Weg zu Groovy Shell Scripting

Groovy Shell Scripting

Groovy Shell Scripting

Groovy ist eigentlich eine universell einsetzbare Programmiersprache, die man z.B. oft bei Banken findet. Was mich aber damals zu Groovy geführt hat war das Problem, dass meine in einen Tomcat deployte Anwendung keine HTTPS-Verbindung zu einem anderen System aufmachen konnte, obwohl Firewall und curl keine Probleme damit hatten. Letztendlich habe ich das Problem gefunden, indem ich ein Groovy-Skript mit der gleichen JVM wie der Tomcat gestartet habe. Es fehlten Zertifikate im Trust Store der JVM.

Später musste ich Daten aus einer komplexeren XML-Datei extrahieren oder Automatisierungsskripte schreiben und landete wieder bei Groovy.

Jetzt werdet ihr euch sicher fragen, ob es ein großer Umstieg war, gleich eine neue Sprache zu lernen. Nein, als Java-Programmierer hatte ich nie das Gefühl hatte, eine wirklich neue Sprache lernen zu müssen. Groovy war eher Java wie ich es mir immer gewünscht hatte. Wenn man sich neuere Sprachfeatures von Java ansieht, etwa die Type Inference in Java 10 oder die in Java 8 eingeführten Lamdas, muss man anerkennen, dass Groovy viele Trends schon erkannt hatte, bevor sie auch nur in die Nähe von Java gekommen sind.

Ich bin also über das Skripting von Java zu Groovy gekommen. In diesem und den nächsten Blogbeiträgen möchte ich euch einige Features beschreiben, die ich oft verwende, wenn ich mit Groovy Shell Scripting unterwegs bin.

Getting Groovy – Installation und Setup

Meinen liebsten Installationsweg für Groovy habe ich gefunden, als ich ein Tool gesucht habe, um zwischen Versionen meiner JVM umschalten zu können. Gelandet bin ich bei [sdkman](https://sdkman.io/), einem CLI-Tool, mit dem man eine Menge SDKs installieren und zwischen ihren Versionen hin- und herschalten kann. Sandra hat das sdkman hier auch schon angesprochen.

Die Installation ist denkbar einfach:

curl -s "https://get.sdkman.io" | bash

Nach der Installation seht ihr in eurer .bashrc die folgende Zeile:

# THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

Wenn ihr die zsh, vielleicht sogar mit oh-my-zsh verwendet, wie es Roland hier schon empfohlen hat könnt ihr diese Zeilen auch einfach ans Ende eurer .zshrc kopieren und alles funktioniert. Öffnet eine neue Shell und ihr könnt loslegen:

Installierte und installierbare Versionen von Groovy in sdkman

sdk list groovy

Ihr seht am *, dass ich gerade Groovy 2.5.1 (die derzeit  aktuelle stable Version) und 2.4.15, die aktuelle Version der 2.4er Reihe installiert habe. Am > seht ihr, dass 2.5.1 auch meine default Version für Groovy ist.

Will ich jetzt die aktuelle Alphaversion von Groovy 2.6 installieren, mache ich das mit:

➜ ~ sdk install groovy 2.6.0-alpha-4

Die Version für die aktuelle Shell setze ich mit

➜ ~ sdk use groovy 2.5.1

und den Default für alle Shells mit

➜ ~ sdk default groovy 2.5.1

sdkman hat noch weitere interessante Features, aber das ist ein Thema für einen anderen Blogpost.

A groovy kind of Java – Erste Schritte

Der erste Schritt mit einer neuen Programmiersprache ist in unserer Zunft das „Hello World“. In der Einführung habe ich schon erwähnt, dass ich fast keine Umgewöhnung zwischen Groovy und Java hatte. Das liegt daran, dass Groovy als syntaktische Obermenge von Java entwickelt wurde. Das bedeutet, dass Ihr HelloWorld.java in Java schreiben könnt und es ist valides Groovy. Fangen wir genau so an:

public class Hello {
  public static void main(String [] args) {
    System.out.println("Hello World!");
  }
}

Das würde in Java kompilieren und laufen. Mit Groovy kann ich es auch einfach so ausführen. Ich muss nur die Dateiendung ändern:

➜ mv HelloWorld.java HelloWorld.groovy
➜ groovy HelloWorld.groovy
Hello World!

Es geht aber noch besser. Groovy hat einige Verbesserungen an der Syntax vorgenommen, die die Lesbarkeit von Skripten oft erheblich erhöht, z.B.

– das Semikolon am Zeilenende kann entfallen
– man braucht kein public mehr an Klassen und Methoden, das ist der Default
– man kann Klammern weglassen
– es gibt viele automatisch importierte Klassen und statische Methoden

Die ganzen Features sind wieder ein Thema für einen eigenen Blogpost. Stay tuned…

Für uns auf der Shell ist wichtig, dass man sogar noch die Klassendeklaration weglassen kann. Man bekommt automatisch eine Unterklasse von groovy.lang.Script. Es bleibt folgendes von unserer ehemaligen Klasse übrig:

System.out.println("Hello World!");

Die eben angesprochen automatischen Imports z.B. von println und die optionalen Semikola machen es zu

println("Hello World!")

und auch die Klammern bei Methodenaufrufen sind optional. Es bleibt ein Einzeiler:

println "Hello World!"

Zum groovy Shell Skript werden

Um unser Skript zu einem first class citizen auf der Shell zu machen und wirklich von „Groovy Shell Scripting“ sprechen zu können, muss sich unser Skript in die Unix-Philosophie der kleinen komponierbaren Programme einfügen. Dazu muss es wie andere Skripte ausführbar sein und Daten über Pipes von anderen Programmen annehmen.

Ausführbarkeit bekommen wir, indem wir eine Shebang an den Anfang unseres Skriptes einfügen. Damit sagen wir unserer Shell, dass sie einen neuen Prozess mit dem hinter dem Shebang angegebenen Programm starten soll:

#!/usr/bin/env groovy
println "Hello World!"

Danach müssen wir die Datei noch ausführbar machen:

➜ chmod +x HelloWorld.groovy
➜ ./HelloWorld.groovy
Hello World!

Um gänzlich zu verbergen, dass wir es mit Groovy zu tun haben, können wir noch die Dateiendung entfernen. Groovy braucht sie nicht mehr, wenn unser Skript mit einer Shebang anfängt.

➜ mv HelloWorld.groovy hello_world
➜ ./hello_world
Hello World!

In den nächsten Teilen von „Groovy Shell Scripting“ stelle ich weitere Features von Groovy auf der CLI vor, etwa wie man mit Pipes Daten von anderen Programmen weiter verarbeitet.

1 Kommentar

Tutorials und Top Posts

1 Kommentar

Groovy Shell Scripting Teil 3 - Testing - Employer Branding und Tutorials Web Development 23. Januar 2019 - 22:16

[…] ist Teil 3 unserer Serie zu Groovy Shell Scripting. Im ersten Teil haben wir Groovy mit Hilfe von SDKMAN installiert und ein erstes „Hello World“ auf der […]

Reply

Gib uns Feedback

Diese Seite benutzt Cookies. Ein Akzeptieren hilft uns die Seite zu verbessern. Ok Mehr dazu