Installation und erste Schritte
Spring-RCP: Installation und erste Schritte
Wer schon einmal mit Spring gearbeitet hat, weiß, daß es einer gewissen Vorbereitung bedarf, um mit einem neuen Projekt loslegen zu können. Diesen Aufwand hat man aber für jedes Projekt nur einmal und wird auch schon bei einfachen Vorhaben mit einer großen Zeitersparnis beim eigentlichen Entwickeln und besonders bei der Pflege seiner Software belohnt, wenn man das Spring-Framework einmal einigermaßen verstanden hat.
In diesem Teil geht es genau um diese Vorarbeit: Welche Software braucht man, wo bekommt man sie, wie richtet man ein Projekt ein, wie wird es in die Entwicklungsumgebung integriert und natürlich darf das allseits beliebte "Hallo Welt!" nicht fehlen, um nach der ganzen Einrichtung zumindest ein kleines Erfolgserlebnis zu haben.
1. Benötigte Software
Um mit dem Spring-RCP arbeiten und dieses Tutorial nachvollziehen zu können ist folgende Software notwendig. Download und eine kurze Erläuterung jeweils unter Softwareumgebung.
- Ein JDK , das mindestens Java 5 entspricht. Ich empfehle das neueste Java 6 SDK von Sun.
- Eine IDE. Empfehlenswert sind das kostenlose Eclipse, das kommerzielle Intellj IDEA und mit kleinen Einschränkungen das schon erwähnte Netbeans, bei dem sich lediglich die Einrichtung einer Spring-Rich Anwendung etwas aufwendiger gestaltet, als bei den anderen beiden.
- Subversion
- Apache Maven, um schnell und einfach die jeweils neueste Version des Spring-RCP generieren und schneller mit dem Programmieren eigener Anwendungen beginnen zu können.
Alle weiteren benötigten Bibliotheken, wie Datenbank, Suchmaschine etc. werden wir später über Maven einbinden.
2. Spring-RCP herunterladen und generieren
Man kann entweder ein vorkompiliertes Paket herunterladen und installieren, oder das Projekt aus den Quellen selbst erzeugen. Ersteres ist zwar bequemer, aber da das Projekt im Moment fast täglich verbessert wird, ist es meines Erachtens sinnvoller, die kleine Mühe auf sich zu nehmen, es selbst zu erzeugen.
- Homepage des Projektes
- Homepage des Springframeworks
- Supportforen für das Springframework und das Spring-RCP
Der Quellcode für das Spring-RCP befindet sich hier:
http://svn.sourceforge.net/viewcvs.cgi/spring-rich-c/trunk/spring-richclient/
Der Kommandozeilenbefehl, um den kompletten Quellcode herunterzuladen:
svn checkout https://spring-rich-c.svn.sourceforge.net/svnroot/spring-rich-c/trunk \ spring-richclient
Um den Sourcecode mit TortoiseSVN unter Windows herunterzuladen erstellt man im Explorer ein Verzeichnis spring-richclient an einem Ort seiner Wahl, klickt es im Explorer mit der rechten Maustaste an und wählt aus dem Kontextmenü "SVN Checkout". Im dann erscheinenden Dialog gibt man im oberen Textfeld folgendes ein:
https://spring-rich-c.svn.sourceforge.net/svnroot/spring-rich-c/trunk
Das zweite Textfeld sollte schon mit dem richtigen Verzeichnisnamen vorbelegt sein.
Wenn der Quelltext fertig heruntergeladen ist, kommt Maven ins Spiel.
In das Verzeichnis wechseln, in welches man den Quelltext heruntergalden hat (unter Windows dafür eine Eingabeaufforderung öffen) und folgendes eingeben:
mvn install -DdownloadSources=true
Maven lädt nun aus dem Internet alle benötigten Bibliothen inklusive Sourcecoude nach und compiliert den Sourcecode für das Spring-RCP. Wenn Fehlermeldungen kommen, kann es daran liegen, daß einer der Downloads zu langsam war oder unterbrochen wurde. In diesem Fall den Befehl einfach noch einmal, oder auch mehrmals starten. Bereits heruntergeladene Bibliotheken werden von Maven nicht noch einmal geladen.
Wenn dieser Schritt fehlerfrei durchlaufen wurde, sind alle benötigten Bibliotheken von Drittherstellern heruntergeladen und die Bibliotheken des Spring-RCP sind bereit.
3. Das Applikationsgerüst automatisch erstellen lassen
Zum Zeitpunkt des Schreibens ist Version 0.3.0-SNAPSHOT aktuell und bevor die folgende Anleitung zur Erstellung einer minimalen Beispielanwendung ausgeführt wird, sollten noch folgende kleine Änderungen am Projekt vorgenommen werden:
Im Installationsverzeichnis in das Unterverzeichnis archetype\src\main\resources\archetype-resources wechseln und in der Datei pom.xml die Kommentare entfernen, mit denen tiger, also Unterstüzungsklassen für Java 5 und sandbox, also noch nicht gut dokumentierte, aber bereits lauffähige Klassen aus dem Archetypen ausgeschlossen werden. Nach dem Abspeichern wieder in das Hauptverzeichnis des Projektes wechseln und noch einmal mvn install laufen lassen.
Zuerst noch einige Vereinbarungen: Für dieses Tutorial habe ich folgendes Verzeichnis und folgende Paketstruktur gewählt. Den Laufwerksbuchstaben unter Windows mit einem zur eigenen Umgebung passenden ersetzen, unter Linux oder MacOS mit einem passenden Pfad, wie z.B. "~". Darüber hinaus ist im Zeitalter des Web 2.0 ein seltsam abgekürzter Name Pflicht, weshalb wir den profanen Zettelkastenin Notestr (sprich: "Noutster") umbenennen.
- Projektverzeichnis: X:\Pija\Tutorials\Notestr (or ~/Pija/Tutorials/Notestr)
- Paketstruktur: de.pija.notestr
Die Programmierer des Projektes haben einen Maven-Archetypen erstellt, um schnell mit eigenen Anwendungen beginnen zu können. Um diesen Archetypen zu erzeugen, erstellt man ein leeres Verzeichnis an einem Ort seiner Wahl begibt sich dorthin und gibt folgendes ein:
mvn archetype:create \ -DarchetypeGroupId=org.springframework.richclient \ -DarchetypeArtifactId=spring-richclient-archetype \ -DarchetypeVersion=0.3.0-SNAPSHOT \ -DgroupId=your.group.id -DartifactId=your-artifact-id
Die Version (0.3.0-SNAPSHOT) muß ggf. durch die aktuell heruntergeladene Version ersetzt werden. Ebenfalls müssen your.group.id und your.artifact.id durch das eigene Paket und den eigenen Projektnamen ersetzt werden. Außerdem dienen die "\" nur der besseren Lesbarkeit. Der eigentliche Aufruf im Verzeichnis "X:\Pija\Tutorials" für unser Beispiel würde so aussehen (der gesamte Text ist eine einzige Zeile):
mvn archetype:create -DarchetypeGroupId=org.springframework.richclient -DarchetypeArtifactId=spring-richclient-archetype -DarchetypeVersion=0.3.0-SNAPSHOT -DgroupId=de.pija.notestr -DartifactId=Notestr
Dann in das neue Verzeichnis wechseln
cd Notestr
und wieder
mvn install
Wenn man Eclipse oder Intellij IDEA verwendet, kann man noch folgende Befehle eingeben um Projektdateien für die entsprechende IDE zu erzeugen. Entweder
mvn eclipse:eclipse
oder
mvn idea:idea
In diesem Tutorial werden wir Eclipse verwenden und demnach den ersten Befehl eingeben. Da es beim Debugging einer Anwendung sehr nützlich ist, die Quellen einer Bibliothek einsehen zu können, hängen wir noch den Parameter an, der die Sourcecodes automatisch herunterlädt und im Projekt zur Verfügung stellt. Der vollständige Befehl lautet also:
mvn eclipse:eclipse -DdownloadSources=true
4. Die neue Applikation in Eclipse einbinden und starten
Bevor wir richtig durchstarten können, muß erst unsere Entwicklungsumgebung eingerichtet und die neue Applikation in Eclipse importiert werden. Also Eclipse starten und dann mit File -> Import -> Existing Project into Workspace den Import-Wizard starten und dann das Verzeichnis auswählen, in welchem die Applikation erzeugt wurde. Es sollte das zu importierende Projekt angezeigt sein. Darauf achten, daß "Copy projects into workspace" nicht ausgewählt ist und nach einem Klick auf Finish befindet sich die neue Applikation im Projektbaum. Um sie aber auch noch lauffähig zu machen müssen in aller Regel die Laufzeitbibliotheken eingebunden werden.
Dies ist glücklicherweise sehr einfach, wenn man Maven benutzt, da der Archetyp schon alle Bibliotheken mit der Variablen "M2_REPO" einbindet. Man muß Eclipse also nur noch diese Variable bekannt machen.
Projekt markieren und dann mit Project -> Properties -> Java Build Path die entsprechende Einstellungsseite aufrufen. Auf der rechten Seite den Reiter Libraries wählen.
Auf Add Variable und dann auf Configure Variables und New klicken und dann bei Name "M2_REPO" eingeben und bei Path nach Klick auf Folder in das Verzeichnis .m2 im Benutzerverzeichnis navigieren. Unter Windows ist das z.B. c:\Dokumente und Einstellungen\{Benutzername}\.m2\repository.
Jetzt ist alles für den ersten Start unseres neuen Wunderwerkes vorbereitet. Run -> Run..., dann links im Baum Java-Application erweitern und es sollte dort ein Eintrag SimpleApp auftauchen. Diesen markieren und den Button Run anklicken. Wenn dieser Eintrag nicht erschein, dann einfach eine neue Konfiguration erstellen: Doppelklick auf Java-Application, dann im rechten Teil des Dialogs unter Name Notestr eingeben, auf den Button hinter dem Texteingabefeld zu Project klicken und das Projekt Notestr auswählen und zuletzt nach Klick auf den Button hinter Main class die angezeigte SimpleApp bestätigen.
Es läuft! Und das beste ist, daß abhängig von der Ländereinstellung des Systems automatisch die richtige Sprache ausgewählt wird!
Im Konsolenfenster laufen jetzt erst einmal die ganzen Log-Meldungen des Springframeworks durch und was zuerst auffält, ist eine Fehlermeldung, daß log4j nicht richtig eingerichtet ist.
Im Verzeichnis src/main/resources einfach eine Datei "log4j.properties" erstellen und den folgenden Text einfügen:
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file ###
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=notestr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=WARN,stdout,file
log4j.logger.de.pija.notestr=INFO,stdout
Wenn die Anwendung neu gestartet wird, sollten die richtigen Logmeldungen des Spring-RCP erscheinen! Alle Warnungen und Fehler werden durch den rootLogger automatisch in der Datei notestr.log gepeichert. Alle Logmeldungen aus dem Paket de.pija.zettelaksten die mindestens das Logleven INFO haben, werden auf die Standardausgabe ausgegeben. Wenn man mehr Meldungen will, kann man das Loglevel auf DEBUG herabsetzen und wenn man die INFO-Meldungen unseres Tutorials auch in der Logdatei haben möchte, lautet die entsprechende Zeile: log4j.logger.de.pija.notestr=INFO,stdout,file
Der Text im Fenster des gestarteten Programms sollte in Englisch sein, die Menüs sind aber schon auf die Systemsprache, also vermutlich Deutsch, eingestellt. Das Spring-RCP bietet eine sehr einfache Internationalisierung an, die bei den Standardmenüs auch schon standardmäßig eingesetzt ist.
5. Hallo Welt!
Kein Einstieg in eine Progammiersprache oder ein Framework ohne das berühmte Hallo Welt! Beispiel.
Wenn man sich das Applikationsfenster anschaut, liegt es nahe, den Titel des inneren Rahmens und die Meldung in diesem zu verändern.
Bei der vorliegenden, sehr einfachen Applikation finden sich alle Beschriftungen und auch die Nachricht in der für die Internationalisierung zuständigen Datei messages.properties im Verzeichnis src/main/resources/ui in der wir folgende Einträge finden:
# Messages for the Archetype Application applicationDescriptor.title=Spring Rich Client - Archetype Application applicationDescriptor.caption=Experience the coolness of Spring Rich Client applicationDescriptor.description=The Archetype provides the basic pieces of a \ Spring Rich Client application # Initial View initialView.label=&Initial View initialView.caption=Initial View for the sample application initialView.message=This is the initial view!
Da wir die Sprache Deutsch verwenden wollen, übersetzen wir kurzerhand die gesamte Datei, ändern auch den Applikatiionstitel und speichern das Ganze unter message_de.properties.
# Meldungen der Zettelkasten Anwendung applicationDescriptor.title=Notestr Tutorial Anwendung applicationDescriptor.caption=Kleine Beispielanwendung für das Spring-RCP applicationDescriptor.description=Diese Anwendung illustriert die Möglichkeiten des\ Spring-RCP. # Erste Ansicht initialView.label=&Hallo Welt Ansicht! initialView.caption=Hallo Welt Ansicht für das erste Tutorial-Kapitel initialView.message=Hallo Welt! Hier bin ich
Nach einem erneuten Start der Applikation bekommen wir die gewünschten Titel und Meldungen, ohne daß wir dazu auch nur eine einzige Zeile Java hätten schreiben oder verändern müssen. Wie alles zusammenhängt und was die einzelnen Dateien im resources-Verzeichnis bedeuten und bewirken, ist Gegenstand des nächsten Kapitels.











