Donnerstag, 12. Juli 2012

maven

Ich muss es 'raus lassen: maven ist ein Klumpert.

Wir haben mühsam einige unserer Projekte auf maven umgestellt, weil's in einem Kundeprojekt verwendet wird und sich die Theorie gut angehört hat.
Die Praxis schaut aber ganz anders aus und deswegen werden wir's bei nächster Gelegenheit wieder entfernen.
Hier ein paar Gründe, warum es weg muss:
* die Eclipse Integration funktioniert nicht. Es gibt zwar Plugins, aber die liefern immer wieder Fehler, unterstützen einen Teil der maven Features nicht und liefern andere Resultate als die command line Version
* maven Projekte in der Eclipse sind total entkoppelt, was sich u.a. in den folgenden beiden Punkten mainfestiert:
* Eclipse kann Klassen aus anderen maven Projekten nicht direkt referenzieren d.h. man kann nicht mit F3 direkt zur Klasse springen oder per Shift-Ctrl-g alle Referenzen auf einen Member oder eine Klasse finden
* wenn man in einem maven Projekt etwas ändert, ist diese Änderungen für andere maven Projekte unsichtbar, bis man für das geänderte Projekt ein mvn install gemacht hat.
In der Praxis bedeutet das, dass man in der Eclipse z.B. an zwei Klassen unterschiedlicher Projekte arbeitet und sich wundert warum die Änderung, die man gerade in einem Fenster gemacht hat im anderen nicht sichtbar ist. Dann muss man das geänderte Projekt neu installieren(!), damit die Änderungen sichtbar sind. In der Regel ist das nicht nur umständlich sondern dauert auch...
* maven ist bei der Entwicklung in Teams kontraproduktiv, wie der nächste Punkt zeigt
* auf Grund der Konvention SNAPSHOT Versionen zu machen, bis wieder eine Release erstellt wird, gibt's eine Version (z.B. 1.0.0-SNAPSHOT) bis zur nächsten Release (z.B. 1.0.0). Bis dahin sieht man als Entwickler mit maven Mitteln nicht, ob sich etwas geändert hat.
Wenn man z.B. einmal die aktuelle SNAPSHOT Version von Projekt A geholt und lokal installiert hat, ein andere Entwickler etwas an Projekt A ändert und man diese Änderungen aus dem Sourcecode Repository holt, aber nicht lokal installiert, sieht man die Änderungen zwar im Sourcecode, aber maven kennt die Änderungen nicht. D.h. man weiß nicht, ob der maven Stand aktuell ist und muss prophylaktisch lokal installieren, weil sich ja etwas geändert haben könnte. Und installieren bedeutet immer kompletter Build (inklusive Tests, wenn man sauber arbeitet).

Keine Kommentare:

Kommentar veröffentlichen