2011-01-04 6 views
1

Wir haben ein Web-Maven-Modul, das zu einem Krieg kompiliert wird und daher das Servlet-API-Gefäß nicht direkt enthalten muss. Wir verwenden dafür <scope>provided</scope>.Wie man die Abhängigkeit von Servlet-API verwaltet?

Das Problem entsteht, wenn ich versuche, eine kleine main() zu schreiben, um eine meiner Klassen zu testen. Dies ist kein Komponententest, sondern liegt vielmehr im Code selbst.

Dies schlägt auf java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest:

public static void main(String[] args) { 
    final Injector injector = Guice.createInjector(new StandardModule()); 
    // StandardModule is our standard module, with bindings to 
    // something that rightfully depends on servlet API 
    ... 
} 

Neben meinem Modul auf zwei oder drei verschiedene Module aufgeteilt, gibt es eine einfache Abhilfe, die ich nicht gedacht habe?

Vielleicht ist die beste Lösung, diesen Tester zum Testcode zu bewegen.

Antwort

3

Sie können <scope>test</scope> verwenden, wenn Sie es für Tests haben möchten. Allerdings funktioniert provided für mich in Eclipse gut - es wird dem Klassenpfad hinzugefügt.

+0

Scope: Kompilieren ist der Standardbereich, der nicht das ist, was sie wollen (weil das das Glas zum Krieg hinzufügen würde). scope: test sollte funktionieren –

+0

ja, das habe ich entfernt. :) – Bozho

+0

Ich habe den Code in den Ordner "test" (in Intellij, nicht Eclipse, BTW) verschoben, und es funktioniert wie ein Charme. Vielen Dank. – ripper234

1

Wenn Sie Eclipse mit m2eclipse verwenden, wird <scope>provided</scope> korrekt aufgelöst und Ihre Hauptklasse wird ordnungsgemäß kompiliert und ausgeführt.

Verwandte Themen