Kleine Helfer

10 bewährte Open-Source-Tools für Java-Profis

20.02.2013 von Diego Wyllie
Einer der Hauptvorteile von Java besteht in der großen Anzahl an nützlichen Open-Source-Tools, die Entwicklern die tägliche Arbeit erleichtern. Welche davon sich in der Praxis auch wirklich bewährt haben, erfahren Sie in diesem Beitrag.
10 bewährte Open-Source-Tools für Java-Profis.
Foto: fotolia.com/Julien Eichinger

Java stand als Programmiersprache und Plattform in den letzten Jahren immer öfter in der Kritik, zu komplex und altmodisch für moderne Web-Anwendungen zu sein. Dennoch ist die Internet-Landschaft nach wie vor stark von Java-Technologien geprägt - besonders im Enterprise-Bereich. Dies zeigt sich nicht zuletzt an der vergleichsweise großen Anzahl an quelloffenen Frameworks, Code-Libraries und Tools, die aus der starken Community kommen und den Java-Entwickler vor die Qual der Wahl stellen. Auf den folgenden Seiten präsentieren wir Ihnen 10 praktische Werkzeuge, die den Alltag des Java-Programmierers erleichtern können. Funktionalität, Umfang, Reife und Dokumentation der hier aufgeführten Lösungen ermöglichen sowohl kleinen als auch größeren Entwickler-Teams einen kosteneffizienten Einsatz in kommerziellen und kritischen Projekten.

Die Tools 1 bis 7 bieten nützliche Klassenbibliotheken und Frameworks, die Tools 8 bis 10 eignen sich für den Einsatz im Projektalltag.

10 bewährte Open-Source-Tools für Java-Profis
1. Apache Wicket
Mit “Wicket” bietet die Apache Foundation ein leichtgewichtiges Web-Framework für Java-Projekte, das auf komplizierte Komponentenmodelle und langwierige XML-Konfigurationen verzichtet. Es bietet sich als interessante Alternative zu populären Komponenten-orientierten Lösungen wie Tapestry und Google Web Toolkit (GWT).
2. Log4J
Log4J gilt als eines der besten Logging-Frameworks für Java-Projekte und hat sich über 15 Jahre Weiterentwicklung als De-facto-Standard etabliert. Mittlerweile gibt es für jede populäre Programmiersprache eine entsprechende Lösung, die auf den Log4J-Konzepten aufbaut. Wer also ein einfaches, hochperformantes und flexibles Framework zum Loggen von Programmmeldungen in Java-Projekten sucht, der wird mit dieser bewährten Lösung fündig.2. FileUpload
3. Apache FileUpload
Die “FileUpload”-Bibliothek macht das Hochladen von Dateien bei Web-basierenden Java-Anwendungen recht einfach. Wie von der Apache Foundation nicht anders zu erwarten, ist die Lösung in Sachen Robustheit und Performance kaum zu übertreffen.
4. ImgScalr
Mit Hilfe der quelloffenen Klassenbibliothek “Imgscalr” können Java-Entwickler beliebige Bilder auf einfache Weise und ohne Verzerrungen skalieren. Besonders praktisch ist das Tool, wenn man Miniaturansichten für Bildergalerien oder Artikelübersichten generieren möchte.
5. Simple XML
Das weniger bekannte, aber mächtige “Simple”-Framework vereinfacht die Arbeit mit XML-Inhalten unter Java. Mit kaum einem anderen Tool lassen sich Java-Objekte so schnell und einfach im XML-Format serialisieren wie mit diesem Werkzeug. Neben der einfachen Nutzung überzeugt es auch durch die gute Performance.
6. JFreeChart
Mit der Open-Source-Bibliothek "JFreeChart" können Java-Entwickler interaktive und dynamische Diagramme leicht in Desktop- oder Web-Anwendungen implementieren. Das Framework überzeugt vor allem durch zahlreiche, vorgefertigte Diagrammtypen und ein reichhaltiges Funktions-Set, mit dem sie nach eigenen Vorstellungen angepasst werden können.
7. Quartz Scheduler
Mit “Quartz” erhalten Java-Entwickler einen umfangreichen Werkzeugkasten, mit dem sich beliebige Cronjobs realisieren lassen. Das Framework gilt als ausgesprochen robust und stabil und kann sowohl in Desktop-Anwendungen als auch in kritischen J2EE-Systemen eingesetzt werden.
8. JEdit
Bei “JEdit” handelt es sich um einen leistungsfähigen, Java-basierenden Text-Editor, der sich als optimaler Ersatz für einfache Programme wie Microsofts Notepad eignet. Das Tool bietet Syntax-Hervorhebung für über 100 Programmiersprachen und kann durch zahlreiche Plug-Ins erweitert werden.
9. CruiseControl
"CruiseControl" vereinfacht das Deployment von Software-Projekten im Java-, aber auch im .Net-Umfeld. Durch die Automatisierung von Build-Prozessen und Unit-Tests ermöglicht das Tool, die Produktivität der Entwickler zu steigern. Die einfache Konfiguration macht es auch für kleine Teams interessant.
10. Launch4j
Das leichtgewichtige Open Source-Tool "Launch4J" erlaubt es Java-Entwicklern, ihre Anwendungen in native und ausführbare Windows-Dateien zu verpacken. Das Tool überzeugt vor allem durch seine einfache Bedienung und lässt sich mittels ANT in eigene Build-Tasks integrieren.

1. Apache Wicket: Komponenten-orientierte Web-Entwicklung

Apache Wicket
Foto: Diego Wyllie

Eine im Vergleich zu Struts und Spring weniger bekannte, aber dennoch leistungsfähige und robuste Lösung, auf der die eigene Web-Software aufbauen kann, ist "Apache Wicket". Sie abstrahiert das zustandslose Http-Protokoll mit einem durchdachten Objekt-orientierten Programmiermodell, das es Entwicklern ermöglicht, Web-Systeme analog zu Desktop-Anwendungen mit Swing zu implementieren.

Dabei werden Benutzeroberflächen durch eine Java-Klasse und eine dazugehörige HTML-Datei repräsentiert. In der Klasse sind sämtliche grafische Komponenten wie Labels, Buttons und Textfelder definiert. Im HTML-Code müssen dann die dazugehörigen Tags mit dem Attribut "wicket:id" markiert werden, um eine Verbindung zu der entsprechenden Klasse herzustellen. Hier lassen sich sowohl vorgegebene Klassen als auch eigene, anwendungsspezifische Komponentenklassen verwenden. Diese kann man zudem an Modellobjekte binden, was die Konvertierung, Validierung und Speicherung von Benutzereingaben deutlich vereinfachen kann. Darüber hinaus bieten Wicket-Komponenten Ajax-Unterstützung "out of the box" - ohne eine einzige Zeile JavaScript-Code schreiben zu müssen.

2. Log4J: Klassisches Logging-System

Log4J
Foto: Diego Wyllie

Ein weiteres hilfreiches Tool von der renommierten Apache Foundation ist das flexible Logging-Framework "Log4J". Es wurde bereits vor rund 15 Jahren in seiner ersten Version veröffentlicht und hat sich seitdem kontinuierlich weiterentwickelt. Mittlerweile ist die Lösung zentraler Bestandteil des "Logging Services"-Projekts und sowohl unter altgedienten Java-Profis als auch unter Programmieranfängern sehr beliebt. Grundsätzlich besteht sie aus drei Hauptkomponenten: "Loggers", "Appenders" und "Layouts". Die Ersten dienen dazu, Fehler-, Info- und Warnmeldungen an die gewählte Logging-Schnittstelle weiterzuleiten. Über verschiedene Prioritätsstufen (Off, Fatal, Error, Warn, Info, Debug, Trace, All) kann der Entwickler festlegen, was für Meldungen geloggt werden sollen.

Anstatt auftretende Fehler auf der Standardausgabe auszugeben, können mittels Appender weitere Ausgabekanäle definiert werden. So schreibt beispielsweise der "JDBCAppender" sämtliche Logs in eine Datenbank, während der "FileAppender" dies in eine einfache Datei tut. Zudem können Logs per E-Mail versendet oder ins Ereignisprotokoll des Windows-Betriebssystems geschrieben werden. Layouts dienen schließlich dazu, die Log-Ausgabe zu formatieren. Neben einfachem Plain-Text werden dabei auch gängige Formate wie XML und HTML unterstützt.

3. FileUpload: Dateien einfach hochladen

FileUpload
Foto: Diego Wyllie

Von der Apache Foundation stammt auch "FileUpload". Dabei handelt es sich um eine robuste Klassenbibliothek für Servlets und Web-Anwendungen, die sämtliche Funktionalitäten rund um das Hochladen beliebiger Dateien bietet. Die Übermittlung der Formulardaten erfolgt mit der Post-Methode. Außerdem muss für die Übertragungsart das Attribut "enctype" auf "multipart/form-data" gesetzt werden. Dann können sowohl String-Parameter als auch Binärdateien in einem einzigen Http-Request an den Server gesendet werden.

Der mitgelieferte FileUpload-Parser identifiziert die unterschiedlichen Parameter und stellt entsprechende Funktionen für deren Weiterverarbeitung bereit. Hochgeladene Dateien können wahlweise in den Arbeitsspeicher gelegt, auf der Festplatte gespeichert oder in eine Datenbank gestreamt werden - die Entscheidung liegt beim Entwickler. Außerdem bietet die Library zahlreiche Hilfsmethoden, um die Arbeit mit Datei-Uploads zu erleichtern. Dazu zählen beispielsweise Getter-Methoden, die nützliche Informationen wie Dateityp, -Größe oder -Name zurück liefern, sowie Setter-Methoden, die verschiedene Attribute wie etwa die maximal erlaubte Dateigröße definieren.

4. ImgScalr: Bilder automatisch skalieren

ImgScalr
Foto: Diego Wyllie

Bei Webseiten und -anwendungen müssen Bilder häufig skaliert werden. Überlässt man diese Aufgabe dem Browser, so muss man sich mit weniger professionellen Ergebnissen zufrieden geben. Denn Firefox, Internet Explorer, Chrome und Co. achten beim Ändern der Bildgröße nicht darauf, die richtige Bildproportion zu behalten. Hier kommt die Library "Imgscalr" ins Spiel.

Das Tool basiert auf der nativen Java 2D-API und bietet einen besonders schnellen und effizienten Weg, Bilder ohne Verzerrung zu skalieren. Dazu ist nur ein einziger Methodenaufruf erforderlich: "Scalr.resize()". Als Eingabeparameter werden die gewünschten Hohe und Breite in Pixeln übergeben. Die Methode sorgt automatisch dafür, dass die Bildproportion immer beibehalten wird und liefert ein Image-Objekt zurück, das man beliebig weiter verarbeiten kann. Ein weiteres, optionales Eingabeparameter dient dazu, den anzuwendenden Algorithmus festzulegen. Darüber hinaus kann der Entwickler mit den Optionen "Quality", "Balanced" und "Speed" je nach Anwendungsszenario seine eigene Prioritäten setzen.

5. Simple: XML-Serialisierung leicht gemacht

Simple XML
Foto: Diego Wyllie

XML-Tools und -Frameworks für Java gibt es wie Sand am Meer. Sie helfen dem Entwickler, Routineaufgaben wie das Parsen von XML-Inhalten oder das Generieren von XML-Dokumenten schneller und effizienter durchzuführen. Zu den weniger bekannten Vertretern dieser Kategorie zählt das quelloffene Framework "Simple", das im Jahr 2006 veröffentlicht wurde.

Die Library bietet besonders einfache Mechanismen, um aus einfachen Java-Objekten XML zu erzeugen (XML-Serialisierung) und umgekehrt (XML-Deserialisierung). Der Clou: Der Serialisierungs-Prozess wird mittels Java-Annotations gesteuert. Das sind Sprachkonstrukte, die die Einbindung von Metadaten in den Quelltext erlauben. In dem Fall dienen einfache Annotationen wie "@Root", "@Element" oder "@Attribute" der Markierung von Klassen und Klassenattribute, die im XML-Format serialisiert werden sollen. Auf diese Art und Weise und unter Verwendung weiterer Annotationen lassen sich beliebig komplexe Objekte im XML-Format serialisieren.

6. JFreeChart: Professionelle Diagramme für Web und Desktop

JFreeChart
Foto: Diego Wyllie

Mit der Bibliothek "JFreeChart" können Java-Entwickler interaktive und dynamische Diagramme leicht in Desktop- oder Web-Anwendungen implementieren. Der Hauptvorteil dieser Open-Source-Lösung besteht darin, dass sich Entwickler mit den grafischen Komponenten der Diagramme zunächst nicht befassen müssen. Das Rendering der unterschiedlichen Chart-Typen wird vollständig vom Framework übernommen. So lassen sich mit nur wenigen Zeilen Code einfache Balken- und Kuchendiagramme genau so schnell erstellen wie Gantt- oder komplexere Statistik-Charts.

Neben vorgefertigten Diagrammen bietet JFreeChart ein umfangreiches Feature-Set, das jede Aufgabe im Visualisierungsprozess vereinfachen kann - von der Gewinnung der Daten, über die dynamische Erzeugung der Charts bis hin zu deren Integration in Desktop- oder Web-Anwendungen. Zudem lässt sich das grafische Layout der Charts bis ins kleinste Detail nach eigenen Vorstellungen anpassen. Praktisch ist ebenfalls die Möglichkeit, eigene Diagramme in gängigen Formaten wie PNG, SVG oder JPG exportieren zu können.

7. Quartz Scheduler: Zuverlässige Cronjobs leicht implementieren

Quartz Scheduler
Foto: Diego Wyllie

Dateien zu bestimmten Zeiten von FTP-Servern herunterladen, wöchentliche Statistiken automatisch generieren, oder jeden Montag um 19 Uhr einen Newsletter versenden: Für wiederkehrende Aufgaben, die in bestimmten Zeitintervallen ausgeführt werden sollen, gibt es viele Anwendungsfälle. Um sie in Java-Projekten leicht zu implementieren, können Entwickler auf den "Quartz Enterprise Job Scheduler" zurückgreifen, ein hochwertiges Framework, das in namhaften Produkten wie Spring oder JBoss eingesetzt wird.

Das Framework dient dazu, einfache, aber auch komplexe Zeitpläne für die Ausführung wiederkehrender Aufgaben (Jobs) erstellen und diese dann auch ausführen zu können. Jobs können beliebige Java-Klassen sein, sie müssen nur das Job-Interface implementieren. Die Zeitpläne beruhen im einfachsten Fall auf Kalendereinträgen - etwa "jeden Donnerstag um 16:00" -, können aber bis ins Detail vom Entwickler selbst definiert werden. So lässt sich beispielsweise ein Job implementieren, der nächsten Freitag um 18:00 Uhr gestartet und dann 100 Mal in zwei Stunden Abständen wiederholt werden soll.

8. JEdit: Mächtiger Texteditor für Entwickler

JEdit
Foto: Diego Wyllie

Neben vielen hilfsreichen Klassenbibliotheken stehen Java-Entwicklern auch zahlreiche Anwendungen zur Verfügung, die in den unterschiedlichen Entwicklungsphasen eingesetzt werden und den Projektalltag erleichtern können. Dazu zählt beispielsweise "JEdit", ein Java-basierender Text-Editor, der Syntax-Hervorhebung für über 130 Programmiersprachen bietet - von HTML, CSS und XML über C++, Java und Cobol bis hin zu SQL, Ruby oder PHP. Wer in der scheinbar endlosen Liste der unterstützten Sprachen seine Beliebige nicht finden soll, kann sie mittels XML sogar selbst definieren.

In Sachen Benutzerfreundlichkeit hat das kleine Tool auch einiges zu bieten. Zur besseren Übersicht kann der Anwender etwa die Code-Struktur durch Anfangs- und Endmarkierungen ("{{{" und "}}}") eines Blocks oder Einrückungen markieren, damit einzelne Bereiche ein- beziehungsweise ausgeblendet werden können. Die Bedienoberfläche sowie sämtliche Tastenkürzel lassen sich individuell einstellen, während man komplexe Vorgänge als Makro speichern kann. Ferner gestattet es JEdit, beliebig viele Fenster zu öffnen. Jedes Fenster kann der Editor in einzelne Bereiche aufteilen, wobei in jedem Bereich unterschiedliche Dateien angezeigt werden können. Um die Übersicht dabei zu behalten, steht ein File-Browser zur Verfügung. Zur Einbindung von Compilern, FTP-Client und anderen Funktionserweiterungen sind zahlreiche Plug-Ins auch direkt aus dem Programm heraus verfügbar.

9. CruiseControl: Build-Prozesse automatisieren

CruiseControl
Foto: Diego Wyllie

Wenn mehrere Entwickler an einem Software-Projekt gemeinsam arbeiten, sind Integrationsfehler kaum zu vermeiden. Mit dem richtigen Build-Automatisierungs-Tool kann man sie zumindest frühzeitig erkennen. Im Java-Umfeld hat sich das Tool "CruiseControl" als eine der besten Open-Source-Lösungen dieser Art etabliert. Kern des Werkzeugs bildet das so genannte "Build Loop". Das ist ein Hintergrundprozess, der in regelmäßigen Abständen prüft, ob Änderungen in der zentralen Versionsverwaltung (CVS beziehungsweise SVN) des Projekts durchgeführt wurden. Falls ja, wird das Gesamtsystem neu gebaut und automatisch getestet. Integrationsfehler lassen sich dadurch umgehend erkennen und beseitigen.

CruiseControl ist für Windows- und Unix-Systeme erhältlich und kann durch zahlreiche Plug-Ins erweitert werden. Eine integrierte Web-Anwendung (siehe Grafik) ermöglicht die Konfiguration und Verwaltung der Build-Prozesse und zeigt den aktuellen Projektstatus an.

10. Launch4J: Java-Anwendungen in EXE-Dateien verpacken

Launch4J
Foto: Diego Wyllie

Auf dem Desktop konnte sich Java nicht so richtig durchsetzen. Dies lag nicht zuletzt daran, dass sich Java-Anwendungen nicht so leicht installieren lassen wie native Applikationen. Unter Windows zum Beispiel kommt es häufig zu Schwierigkeiten, wenn der User versucht, .jar-Dateien auszuführen: Auf dem PC ist eine inkompatible oder gar keine JVM installiert, solche Dateien sind nicht mit dem Java-Launcher verknüpft - oder die Anwendung startet aufgrund eines internen Fehlers nicht und der User bekommt davon nichts mit, weil die Fehlermeldung auf der Windows-Konsole angezeigt wird.

Besser ist es dagegen, die Anwendung als native Windows-Applikation zu deployen. Schnell und unkompliziert erfolgt dies mit Hilfe von "Launch4J". Mit dem Tool lassen sich sämtliche Anwendungsressourcen in einer einzelnen EXE-Datei verpacken. Dabei kann der Anwender ein Programm-Icon für die Applikation definieren, sowie ein "Splash-Screen", das solange angezeigt wird bis die Applikation fertig geladen wurde. Zudem können weitere Eigenschaften definiert werden wie etwa Registry- oder Classpath-Einträge, ein Java-Download-Hinweis, oder die Bezeichnung der Anwendung, die im Windows-Task-Manager angezeigt wird - statt nur "Java". (ph)