Also, ich werde langsam etwas genervt von Maven 2. Das Projekt-Setup, das wir haben, ist einfach: Ein "Kern" -Projekt, von dem sowohl ein "Batch" als auch ein "Web" -Projekt abhängen, sowie ein "Ear" -Projekt, das von "Web" abhängt. Ziemlich einfache Sachen.
Nun, da der Kern ziemlich häufig verwendet wird und dies das erste Mal ist, dass die Gruppe tatsächlich TDD (testgetriebene Entwicklung) durchführt, wurden ziemlich viele Mocks erstellt, hauptsächlich im Web-Projekt - das Batch-Projekt ist im Moment ziemlich einfach.
Das aktuelle (verschleierte) XML ist im Web-Pom enthalten, um das Kernprojekt als Abhängigkeit einzuschließen:
${project.groupId}
XYZ-core
${project.version}
Das Pom funktioniert, wenn nur dies enthalten ist, sowie der Rest der Jar-Dateien eingeschlossen ist. Eine der eingeschlossenen Jar-Dateien ist die Servlet-API, Version 2.4:
javax.servlet
servlet-api
${version.servlet-api}
provided
Dies ist als bereitgestellter Anwendungsbereich festgelegt, da es vom Web-Container bereitgestellt wird. Keine Überraschungen hier. Mit nur dem im Web-Pom enthaltenen Code werden die Tests ausgeführt und ohne Probleme installiert.
Aber jetzt gibt es all diese Mocks im Web. Batch kann auch einige dieser Mocks verwenden. Natürlich möchte ich daher die Kern Tests als Testbereich sowohl in Batch als auch im Web platzieren, damit ich die Mocks (die Kernfunktionalität nachahmen) in den Tests des Kerns platzieren kann, damit sie unter den Projekten gemeinsam genutzt werden können. Der folgende (verschleierte) Ausschnitt funktioniert im Batch-Projekt:
${project.groupId}
XYZ-core
tests
${project.version}
test
Wenn ich dies jedoch zum Web-Pom hinzufüge, erhalte ich das Ganze, wenn ich versuche, das Web zu erstellen.
XYZ.java:[33,16] kann Symbol nicht auflösen: Symbol: class HttpServletRequest
Wenn es entfernt wird, wird das Web erfolgreich erstellt.
Irgendwelche Ideen? Die Maven-Version ist 2.0.4. Ich könnte ein Upgrade versuchen, aber das würde viel Ärger bedeuten.
BEARBEITEN: Die Hauptklassen des Webs können nicht mit diesem Fehler kompiliert werden (auch HttpServletResponse wird nicht gefunden). Selbst wenn Tests übersprungen werden (-Dmaven.test.skip=true), tritt dieser Fehler auf.