Ich bin gerade dabei, mehrere J2EE-Projekte von Ant auf Maven2 zu portieren. Alle diese Projekte enthalten 1 EJB und 1 Webmodul und verwenden die empfohlene "skinny" EAR-Paketierungsmethode. Das bedeutet, dass die JARs, von denen die EJB- und/oder Web-Module abhängen, einfach in den Root der EAR gelegt werden. Sowohl EJB- als auch Webmodule haben Class-Path-Einträge in ihren jeweiligen Manifesten, um auf die spezifischen JARs zu verweisen, und der Class-Path des Webmoduls verweist auch auf das EJB-Jar.
Ich war entsetzt (ist das zu stark? :)), als ich feststellte, dass Maven dies nicht sehr gut unterstützt. Ich habe die offizielle Seite zur Handhabung von Skinny WARs gelesen, aber das bedeutete, dass ich die WAR-Abhängigkeiten im EAR pom duplizieren musste und, noch schlimmer, auch die transitiven Abhängigkeiten. Es scheint sinnlos zu sein, Maven zu übernehmen, wenn man Abhängigkeiten überall manuell handhaben muss!
Ich fing dann an zu googeln und fand eine Vielzahl von Workarounds - offensichtlich bin ich nicht der erste, der (a) ein Skinny EAR machen will und (b) den von Maven vorgeschlagenen Ansatz (der selbst ein Workaround ist) nicht mag.
Ich habe einige dieser Ansätze ausprobiert, aber keiner von ihnen hat bei mir funktioniert. Ich fand auch einige Probleme, die wie Maven-Fehler aussahen, z.B. schließt die WAR-Plugin-Direktive 'packagingExcludes' nur die direkten Abhängigkeiten aus, nicht die transitiven! Nicht sehr vertrauenserweckend. Ich habe ein JIRA-Problem für dieses spezielle Problem gefunden, aber es ist noch offen.
Ich habe dann festgestellt, dass mein Kommandozeilen-Maven 2.2.1 sich anders verhält als mein in m2eclipse eingebettetes Maven (Embedder v. 3.0). Unsere Entwickler möchten Maven auf jeden Fall von Eclipse aus steuern, daher war es keine Option, sich auf die neueste Befehlszeilenversion zu verlassen.
Meine Frage lautet also: Lohnt es sich jetzt und in absehbarer Zukunft, auf Maven zu migrieren, wenn wir unsere gesamte Entwicklung in Eclipse durchführen und hauptsächlich an schlanken EAR-Projekten arbeiten? Gibt es irgendetwas in der Zukunft von Maven, das den Umgang mit EARs in einer robusteren und integrierten Weise ermöglicht?