Eclipse RCP vs. Netbeans RCP

[caption id=“” align=“alignright” width=“240” caption=“Image by liber via Flickr”]Cloudal Eclipse[/caption]

Im Zuge der Entwicklung von Kayak muss ich mich für ein GUI Framework entscheiden. Relativ schnell war klar, dass möglichst eine RCP-Anwendung entstehen soll, um eine professionelle GUI und eine Plugin-Struktur nutzen zu können. Die beiden großen Rich-Client-Plattformen für Java sind Eclipse RCP und Netbeans RCP, die sich in einigen wichtigen Punkten unterscheiden. Ich möchte hier im Folgenden einen kleinen Vergleich im Bezug auf verschiedene Aspekte anstellen:

Automatisierte Builds

[caption id=“” align=“alignleft” width=“224” caption=“Image by clofresh via Flickr”]Hudson icon for Fluid[/caption]

Ein gewünschtes Feature von Kayak ist ein möglichst automatisierter Buildprozess. Dies ermöglicht es beispielsweise, nach einem Commit im Repository automatisch ohne Zutun des Programmierers ein neues Installationspaket zu generieren. Das geeignetes Tool hierfür ist in der Java-Entwicklung Maven, das zunehmend Ant ersetzt. Für die Eclipse-Plattform gibt es einige Plugins und Tutorials, die die Erstellung von RCP-Applikationen mit Maven ermöglichen sollen. Ich war jedoch über mehrere Tage nicht in der Lage, auch nur eines dieser Plugins funktional zum Laufen zu bringen. Teilweise sind sie stark veraltet oder die passenden Tutorials funktionieren nicht mehr. Eine direkte Integration in Eclipse ist noch nicht vorhanden und die Eclipse-Homepage ist bezüglich dieses Themas nicht gerade hilfreich. Bei Netbeans zeigt sich ein ganz anderes Bild. Das Bauen von RCP-Applications mit Maven wird standardmäßig unterstützt und bereits auf der Homepage findet man Hilfe zu diesem und anderen Themen. Über die automatische Generierung hat man nach ein paar Sekunden eine funktionierende Anwendung und kann mit seinen eigenen Anpassungen beginnen.

GUI-Framework Eclipse setzt für die grafische Darstellung auf eine Kombination von SWT und JFace. Durch eine plattformabhängige Implementierung der Oberflächenkomponenten ist es möglich, die nativen Widgets des Betriebssystems zu verwenden. Der vermeintliche daraus resultierende Vorteil ist eine bessere Performance und kürzere Reaktionszeiten der Anwendung. In der Praxis konnten diese Effekte jedoch nicht bestätigt werden. Außerdem kann so nicht einfach für alle Plattformen ein einziger Download der Anwendung angeboten werden. Es müssen jeweils die passenden SWT-Implementierungen mitgeliefert werden. Die Netbeans-Plattform setzt konsequent auf das Java Swing Framework.  Dieses ist bereits in Java enthalten, plattformunabhängig und die zur Verfügung stehenden Widgets lassen sich durch eigene Implementierungen erweitern und anpassen.

Plattformunabhängigkeit Beide Umgebungen ermöglichen es grundsätzlich, plattformunabhängige Java-Applikationen zu entwickeln. Eclipse erkauft sich durch das GUI-Framework, dass für jede Plattform (und das können mit Window 32+64, Linux 32+64 und Mac OS Intel, PPC einige werden) eigene Builds bereitgestellt werden müssen. Bei Netbeans ist dies nicht der Fall. Falls hier jedoch ein Installer für das Programm erstellt werden soll, so ist dieser ebenfalls plattformspezifisch.

Projektfinanzierung und Offenheit

[caption id=“” align=“alignright” width=“300” caption=“Image via Wikipedia”]Levitating, Meditating, Flute-playing Gnu[/caption]

Eclipse wird von der Eclipse Foundation unterstützt. Diese Non-Profit-Organisation wiederum wird von mehreren Unternehmen wie IBM und Oracle gefördert.  Diese breite Aufstellung garantiert, dass die Plattform langfristig vorangetrieben und unterstützt wird. Lizenziert ist Eclipse unter der Eclipse Public License. Diese Lizenz ist nicht GPL-kompatibel und etwas, das die Eclipse-Plattform enthält kann nicht als ganzes unter der GPL verbreitet werden. Netbeans ist doppel-lizenziert unter der GPLv2 (mit Classpath-Ausnahme) und der CDDL. Dadurch ergibt sich die Möglichkeit, eine unter der LGPL lizenzierte Software mit Netbeans Bibliotheken zu linken und zusammen zu verteilen. Netbeans wurde lange Jahre unter Sun entwickelt und ist nun bei der Übernahme durch Oracle in deren Besitz übergegangen. Es gibt zwar ein Partner-Programm, über das andere Firmen für die Entwicklung mit ins Boot geholt werden aber grundsätzlich liegt es in der Macht von Oracle, über die Zukunft von Netbeans zu entscheiden. Falls Entscheidungen getroffen werden, die der Community nicht passen, kann Netbeans natürlich dank der GPL auch jederzeit geforkt werden. Außerdem gibt es zur Zeit Überlegungen, ob für Netbeans nicht auch eine Foundation geschaffen werden kann.

Community Die Eclipse-Community ist ohne Zweifel sehr groß und vor allem breit aufgestellt. Dies ist einerseits vorteilhaft, da zu den meisten Themen (abgesehen von Maven-Integration vielleicht :)) viele Informationen vorhanden sind. Daraus ergibt sich jedoch auch die Schwäche, dass es keine richtige zentrale Anlaufstelle gibt, an der man eindeutige Informationen und Tutorials erhält. Man muss sich erst durch Blogposts wühlen, die sich teilweise auf unterschiedliche Versionen beziehen und deren Tutorials vielleicht gar nicht mehr funktionieren. Es gibt eine gute Online-Dokumentation, aber diese deckt auch nur einen Teil der benötigten Informationen ab. Die Netbeans-Community hat eine zentrale Anlaufstelle, um an Informationen zu gelangen. Dort liegt die Online-Dokumentation, Tutorials, Blogs von Entwicklern, ein Forum, Buchempfehlungen sowie Screencasts zu wichtigen APIs. Dieser Aufbau ist für einen Einsteiger sehr angenehm und ermöglicht es, die benötigten Informationen aus einer einzigen Quelle zu beziehen, deren Konsistenz stimmig ist. Speziell die Screencasts stellen zu Beginn eine große Hilfe dar.

Zusammenfassung Auch wenn diese Bewertungen zweifelsohne subjektiv sind und für jedes Projekt sicherlich unterschiedlich ausfallen können möchte ich hier eine kleine Bewertung der einzelnen Abschnitte anstellen:

Kategorie Eclipse Netbeans
Automatisierte Builds -0.5 +1
GUI-Framework 0 +0.5
Plattformunabhängigkeit -0.5 +0.5
Projektfinanzierung und Offenheit +0.5 -0.5
Community 0 +0.5
Ergebnis -0.5 +2
Obwohl beide Plattformen sich in den einzelnen Punkten nicht viel nehmen ergibt sich in der Summe jedoch ein ziemlich eindeutiges Bild. Dies ist der Grund dafür, dass Kayak eine Netbeans RCP-Anwendung wird!