Printemps 3.1 WebApplicationInitializer & Jetty Embarqué 8 AnnotationConfiguration

Je suis en train de créer une simple application web sans aucune configuration XML à l'aide de Printemps 3.1 et embarque une Jetée 8 serveur.

Cependant, j'ai du mal à obtenir de la Jetée à reconnaître mes implementaton du Printemps WebApplicationInitializer interface.

Structure de projet:

src
 +- main
     +- java
     |   +- JettyServer.java
     |   +- Initializer.java
     | 
     +- webapp
         +- web.xml (objective is to remove this - see below).

La Initialiseur classe ci-dessus est une simple mise en œuvre de WebApplicationInitializer:

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

import org.springframework.web.WebApplicationInitializer;

public class Initializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        System.out.println("onStartup");
    }
}

De même JettyServer est une simple mise en œuvre d'un serveur Jetty embarqué:

import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.WebAppContext;

public class JettyServer {

    public static void main(String[] args) throws Exception { 

        Server server = new Server(8080);

        WebAppContext webAppContext = new WebAppContext();
        webAppContext.setResourceBase("src/main/webapp");
        webAppContext.setContextPath("/");
        webAppContext.setConfigurations(new Configuration[] { new AnnotationConfiguration() });
        webAppContext.setParentLoaderPriority(true);

        server.setHandler(webAppContext);
        server.start();
        server.join();
    }
}

Ma compréhension est que sur le démarrage de la Jetée utilisera AnnotationConfiguration pour le balayage des
annoté implémentations de ServletContainerInitializer; il doit trouver Initialiseur et de fil en...

Cependant, lorsque je démarre le serveur Jetty (depuis Eclipse) je vois le suivant sur la ligne de commande:

2012-11-04 16:59:04.552:INFO:oejs.Server:jetty-8.1.7.v20120910
2012-11-04 16:59:05.046:INFO:/:No Spring WebApplicationInitializer types detected on classpath
2012-11-04 16:59:05.046:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/,file:/Users/duncan/Coding/spring-mvc-embedded-jetty-test/src/main/webapp/}
2012-11-04 16:59:05.117:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

L'important est ceci:

No Spring WebApplicationInitializer types detected on classpath

Noter que src/main/java est défini comme un dossier source dans Eclipse, il doit donc être dans le classpath. À noter également que la Dynamique Module Web Facette est défini à la section 3.0.

Je suis sûr qu'il ya une explication simple, mais j'ai du mal à voir la forêt pour les arbres! Je crois que la clé est avec la ligne suivante:

...
webAppContext.setResourceBase("src/main/webapp");
...

Ce sens avec un 2.5 servlet utilisant web.xml (voir ci-dessous), mais que devrait-il être lors de l'utilisation de AnnotationConfiguration?

NB: Tout s'allume correctement si je change les Configurations suivantes:

...
webAppContext.setConfigurations(new Configuration[] { new WebXmlConfiguration() });
...

Dans ce cas, il trouve le web.xml sous src/main/webapp et l'utilise pour fil de la servlet utilisant DispatcherServlet et AnnotationConfigWebApplicationContext de la manière habituelle (complètement ignorant la WebApplicationInitializer de mise en œuvre ci-dessus).

Cela ressemble beaucoup à un problème de classpath, mais j'ai du mal à comprendre comment la Jetée s'associe avec des implémentations de WebApplicationInitializer - toutes les suggestions sont les plus appréciés!

Pour info, je suis en utilisant les suivantes:

Printemps 3.1.1
Jetée 8.1.7
STS 3.1.0

InformationsquelleAutor Duncan | 2012-11-04