Upgrade auf Grails 2.0

Mein favorisiertes Web-Framework Grails hat die Major Version 2 erreicht. Bei der Fülle an neuen Funktionen ist die 2 vor dem Punkt mehr als gerechtfertigt. Einen guten Überblick, über das was sich geändert hat, bietet der Artikel „Das ist neu in Grails 2.0“ von Dierk König.

Für mich war schon die neue interaktive Grails Console mit TAB- Vervollständigung, farbiger, einzeiliger Ausgabe und formatierten Fehlerausgaben das Upgrade wert. Sie ist vor allem bei der Befehlsausführung sehr viel schneller, da dafür keine eigene JVM gestartet werden muss.
Als Testkandidat musste meine Beispiel Grails Anwendung grum (sourcecode auf Google Code) herhalten. Doch so einfach wie ein upgrade von einer Minor Version auf eine andere war es nicht.

Als erstes sollte man die upgrade Hinweise verinnerlichen, denn ein einfaches grails upgrade führte bei mir erst einmal zu einem inkonsistentem Projekt in meiner Entwicklungsumgebung (SpringSource Tool Suite).

Schuld ist man meistens selbst. Doch wo liegen nun die Fallstricke?

Dependency Management

Ein Thema, was ich bis jetzt vollständig ignoriert hatte, war das Dependency Management. In den vorherigen Grails Versionen lagen alle benötigten Bibliotheken (wie der JDBC Treiber) im lib Verzeichnis. Sauberer ist es natürlich die Abhängigkeiten zu deklarieren. Bei Grails macht man dies in der BuildConfig Klasse.

conf/BuildConfig.groovy

dependencies {
   // specify dependencies here under either 
   //'build', 'compile', 'runtime', 'test' or 'provided' scopes eg.

   runtime 'mysql:mysql-connector-java:5.1.16'
   build "displaytag:displaytag:1.2"
   runtime "displaytag:displaytag-export-poi:1.2"
   runtime "displaytag:itext:1.3"
   runtime "displaytag:poi:3.2"
}

Danach sollte man in der IDE die Abhängigkeiten über Grails Tools -> Refresh Dependencies aktualisieren. Reicht dies nicht aus (wie bei mir) hilft es das Dependency Management zu stoppen und zu starten.

  • Grails Tools -> Disable Dependency Management
  • Grails Tools -> Enable Dependency Management

Alternativ kann man in der Grails Konsole folgende Befehle absetzen:

grails> clean
grails> war

Plugins

Dabei kam es bei mir zu Kompilierungs Problemen im Zusammenhang mit den automatisch installierten Plugins jquery und resources, was ich nur durch eine Neuinstallation der Plugins beheben konnte

grails> uninstall-plugin 
grails> install-plugin 

TagLibs

Und wo man schon mal beim Aufräumen ist. Das Tag createLinkTo ist depracted und sollte durch das Tag resources ersetzt werden. An dieser Stelle sollte man auch auf folgenden upgrade Hinweis achten:

If you install Resources (or it is installed automatically), tags like <g:javascript> won’t write anything to the page until you add the <r:layoutResources/> tags to your layout.

Content Negotiation

Ein Punkt warum ich Grails so mag ist, das sich damit sehr leicht REST APIs umsetzen lassen. Hier hat sich in der Version 2.0 auch etwas geändert. Die Content Negotiation richtet sich jetzt nicht mehr nach dem akzeptierten Format des Responses, sondern nach dem Content-Type des Requests.
Dafür muss man im Code withFormat durch request.withFormat ersetzen. Testen kann man diese Änderung mit curl. Z.B. mit:

curl --header Content-Type:text/xml http://localhost:8080/grum/contactData/list

Fazit:
Das Upgrade lohnt sich, auch wenn es mit etwas mehr Arbeit verbunden ist, als sonst.

Links:
grum – Grails 2.0 Beispiel Applikation

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit deinem WordPress.com-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

%d Bloggern gefällt das: