2011-03-06 21 views
5

He revisado la documentación de Spring un par de veces, pero parece que no puedo hacer que las anotaciones de @Controller, etc. funcionen.Spring MVC Annotations

Estoy cargando las dependencias y repositorios en mi POM (... son mis valores específicos):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>...</groupId> 
    <artifactId>...</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>...</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.context</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>org.springframework.web.servlet</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    </dependencies> 

    <repositories> 
    <repository> 
     <id>com.springsource.repository.bundles.release</id> 
     <url>http://repository.springsource.com/maven/bundles/release/</url> 
    </repository> 
    <repository> 
     <id>com.springsource.repository.bundles.external</id> 
     <url>http://respoitory.springsource.com/maven/bundles/external</url> 
    </repository> 
    </repositories> 
</project> 

En mi web.xml, yo soy la creación de servlet despachador:

<?xml version="1.0" encoding="UTF-8"?> 

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
     version="2.4"> 

    <servlet> 
     <servlet-name>DispatcherServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/servlet-context.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>DispatcherServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

Y bajo WEB-INF tengo servlet-context.xml (... es mi paquete controlador):

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
         http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="..." /> 

    <mvc:annotation-driven /> 

    <!-- Adds prefix and suffix to returned views --> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 

</beans> 

creo que debe perder u olvidar algo simple. Eclipse no reconoce las anotaciones y maven no puede construir el proyecto. ¿Puede alguien ayudarme aquí?

EDITAR

Para mayor claridad, en eclipse, sumando los resultados de anotación en:

The import org.springframework cannot be resolved 

Y corriendo mvn instalación limpia resultados en:

package org.springframework.stereotype does not exist 

y la eliminación el ámbito de tiempo de ejecución da como resultado el siguiente error de Maven:

error reading ...\.m2\repository\org\aopalliance\com.springsource.org.aopalliance\1.0.0\com.springsource.org.aopalliance-1.9.9.jar; error in opening zip file 
+0

¿sus controladores se encuentran en el paquete base? –

+1

¿Qué significa "falla en la construcción del proyecto"? – skaffman

+0

Sí, está en paquete base. – mathlovingkitten

Respuesta

4

Encontré la respuesta a mi pregunta en una publicación posterior.

Básicamente, necesitaba agregar el plugin m2eclipse a Eclipse. Puede encontrar instrucciones en http://m2eclipse.sonatype.org/installing-m2eclipse.html si es necesario. Una vez que esté instalado, puede hacer clic con el botón derecho en su proyecto en Eclipse y seleccionar Maven> Habilitar administración de dependencias. Entonces eclipse podrá reconocer las importaciones desde sus dependencias POM.

Así que al final tuve lo siguiente.Eclipse lo reconoció todo, Maven construyó correctamente y empaquetó el proyecto, y Tomcat implementó el proyecto con éxito.

Aquí está mi web.xml conectar el servlet despachador:

<?xml version="1.0" encoding="UTF-8"?> 

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     id="CoreProject" version="3.0"> 

    <!-- SERVLET FOR HANDLING ALL INCOMING REQUESTS --> 
    <servlet> 
     <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/servlet-context.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <!-- SERVLET MAPPING FOR HANDLING ALL INCOMING REQUESTS --> 
    <servlet-mapping> 
     <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

Aquí está mi servlet-context.xml permitiendo al anotaciones y vistas de resolución:

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/mvc 
          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
          http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <!-- SCANS ALL MATCHING PACKAGES FOR COMPONENTS --> 
    <context:component-scan base-package="com.myBasePackage" /> 

    <!-- ALLOWS FOR ANNOTATION MAPPING FOR CONTROLLERS --> 
    <mvc:annotation-driven /> 

    <!-- ADDS PREFIX AND SUFFIX TO RETURNED VIEWS --> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
</beans> 

Aquí está mi archivo POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.myBasePackage</groupId> 
    <artifactId>CoreProject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>CoreProject</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version> 
    </properties> 

    <dependencies> 
    <!-- SERVLET DEPENDENCIES --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <!-- SPRING DEPENDENCIES --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <!-- TESTING DEPENDENCIES --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</project> 

Espero que esto ayude a alguien más.

6

Puede tener algo que ver con lo que ha establecido como el alcance de las dependencias de Spring. Los ha establecido en "tiempo de ejecución", lo que significa que no se utilizan para la compilación y solo se necesitan en tiempo de ejecución. Esto explicaría por qué no se compilará en Eclipse (y probablemente también sea el problema en su compilación Maven, aunque no especificó el error).

Simplemente elimine el alcance para usar el alcance predeterminado (el predeterminado es compilar, que es lo más probable en este caso) y vea si eso lo lleva más lejos.

Actualización:

Gracias para añadir el error específico que está recibiendo.

Esto significa que Maven está tratando de usar una dependencia local, pero no puede abrir el archivo jar. He visto esto suceder a veces cuando el archivo jar se corrompe durante la descarga o solo se descarga parcialmente.

Intente eliminar el directorio ~/.m2/repository/org/aopalliance/com.springsource.org.aopalliance/y vuelva a ejecutar la compilación. Esto hará que Maven vuelva a descargarlo y, con suerte, lo pondrá en buen estado.

+0

Si elimino el alcance, Maven no puede compilar, incluso sin las anotaciones (ver edición). – mathlovingkitten

+0

Bueno, borré algunas de las carpetas y volví a operar, y Maven parece estar bien. Pero ahora, cuando despliegue en Tomcat, aparece el error "dispatcherServlet is not available". Además, Eclipse todavía no reconoce las importaciones de anotación. – mathlovingkitten

0

Asegúrate de que tu versión eclipse en caché del índice repo esté actualizada, incluso puedes actualizar manualmente el índice usando maven repo view y actualizándolo desde allí.

Siempre intento la versión de vanilla (línea de comandos) de mis compilaciones maven, si recibo un error de algún IDE.

0

uso de abajo y tratar, manejador de anotación se debe utilizar de la siguiente manera en su contexto de aplicación .xml errores estereotipo

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
<property name="order" value="0"/> 
    </bean> 

esto será resuelto

si no trabajó añadir debajo de la línea de xsi: schemaLocation

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd