Eclipse RCP vs. Netbeans RCP

Cloudal Eclipse

Image by liber via Flickr

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

Hudson icon for Fluid

Image by clofresh via Flickr

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

Levitating, Meditating, Flute-playing Gnu

Image via Wikipedia

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!

m4s0n501

4 Comments

Jake

Nur mal als kleine Anmerkung:
“Das standard Tool hierfür ist für die Java-Entwicklung Maven.”

Das ist so nicht ganz richtig. Maven ist ein Tool, welches sich zur Zeit immer mehr durchsetzt, aber de facto ist der Standard noch Ant.

J..e

Reply
Philip

Danke für den Vergleich. Ich wusste z.B. nicht, dass es so schwierig ist, Maven in ein Eclipse-Projekt zu integrieren.

Ein Fork auf GPL-Basis wäre wohl kaum attraktiv für eine breite Masse von Entwicklern, die ihre Anwendungen dann ebenfalls unter GPL lizensieren müssen.

Interessant fände ich auch einen detailierteren Vergleich der GUI-Frameworks. Diese “Plattformabhängigkeit” von SWT ist meiner Meinung nicht so ein großer Nachteil, da sich der zusätzliche Aufwand in Grenzen hält.

Interessanter finde ich die Frage, welche GUI-Bausteine tatsächlich besser sind.

Zum Beispiel weiß ich, dass die Tabellenkomponenten in NetBeans (OutlineView / ETable) mächtiger sind, als die Entsprechung bei SWT/JFace. Und ich bin ein Fan von den NetBeans “Nodes”, die es AFAIK in Eclipse so auch nicht gibt.

Dafür ist es vermutlich für Eclipse einfacher, eine DSL zu implementieren (siehe Xtext).

Reply
dschanoeh

Hallo Philip!
Das mit der Maven Integration mag auch an mir liegen, da ich ein RCP (und Maven) Neuling bin. Wenn es die Möglichkeit gibt dann ist sie zumindest sehr sehr schlecht dokumentiert.

Ich denke wenn man Netbeans forkt und dann wieder unter der GPL mit Classpath Exception freigibt muss man das nicht tun. http://wiki.netbeans.org/FaqWhatIsClasspathException
Über diesen Weg will ich auch meine LGPL Anwendung mit Netbeans zusammen ausliefern aber das sollte dann auch mit geschlossener Software funktionieren.

Der Hinweis auf die unterschiedlichen GUI Komponenten ist gut. Das werde ich mir auch nochmal näher anschauen.
Ich habe die ganze letzte Woche gebraucht um Nodes halbwegs zu verstehen :) so langsam lichtet es sich.

Reply

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>