Eclipse WTP no publica dependencias de Maven
tomcat m2eclipse (4)
Estoy intentando configurar un proyecto básico de hello world utilizando Eclipse Indigo y un servidor Tomcat. Creé un proyecto dinámico con un servlet simple. Probé el servlet y funcionó bien. Entonces habilité el soporte de Maven y agregué logback a mi pom. Puse una declaración de registro en el método doGet
del servlet. Cuando ejecuta el servlet, se queja de que no puede encontrar ningún enlace porque los archivos jar de logback no se están copiando en la instancia de Eclipse Tomcat. Esperaba encontrar los frascos publicados en alguna parte aquí:
${workspace}/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/
¿Cómo consigo que Eclipse funcione correctamente con WTP / Maven? También intenté instalar el conector m2e-wtp sin diferencia.
Desde un fondo de ASP.NET, me sorprende la cantidad de trabajo necesario para ejecutar una aplicación web con Eclipse WTP y Maven, especialmente si está aprendiendo por su cuenta. Esperamos que esta guía de inicio rápido ayude a alguien más a ponerse al día rápidamente.
Hay dos formas de hacer que un proyecto de hello world funcione en Eclipse WTP con Maven. Puede crear un proyecto web dinámico y luego agregar la naturaleza de Maven o puede hacer lo contrario.
Pre-requisitos para Eclipse con sitios de actualización
"Web, XML, Java EE y OSGi Enterprise Development"
http://download.eclipse.org/releases/indigo"Integración Maven Para Eclipse"
http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/"Integración de Maven para WTP"
http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/
Configuración de inicio
Instale la copia de Tomcat 7 desde http://tomcat.apache.org/download-70.cgi
Ventana -> Preferencias -> Servidor -> Entorno de ejecución
- Agregue Apache Tomcat 7.0 y seleccione el directorio de instalación local
Opción 1: Crear proyecto web dinámico y luego agregar Maven Nature
Cree un nuevo proyecto de Maven, seleccione el arquetipo org.apache.maven.archetypes: maven-archetype-webapp
Cambiar a la perspectiva de Java EE.
Cree una nueva carpeta de origen, src / main / java . Observe que Eclipse no es lo suficientemente inteligente como para hacer esto por usted y que el orden de las carpetas es incorrecto. La carpeta src / main / java aparece después de src / main / resources . Esto se puede arreglar manualmente más adelante en las propiedades del proyecto.
Crea un nuevo servlet. Observe cómo Eclipse configura de manera predeterminada este archivo en la carpeta incorrecta src / main / resources porque el orden es incorrecto. En su lugar, seleccione manualmente src / main / java . Cambie la asignación de URL en la segunda página del asistente a / * para facilitar las pruebas.
Ahora nuestro servlet está listo, pero las dependencias en la api del servlet están sin consolidar. A) podemos agregar el api del servlet como una dependencia a nuestro proyecto o B) podemos vincularlo a la configuración del servidor Eclipse para Apache 7.0.
Para la opción A, agregue esta dependencia al pom:
.
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>7.0.${set this}</version>
<scope>provided</scope>
</dependency>
Para la opción B:
- Propiedades del proyecto -> Java Build Path -> Libraries -> Add Library -> Server Runtime -> Apache Tomcat 7.0
- Haga clic derecho y ejecute en el servidor:
Debería aparecer una página en blanco en el navegador interno como http://localhost:8080/ $ {artifact}
Prueba de publicación de dependencia :
Añadir joda-tiempo al pom.
Agregue esta línea en el servlet creado anteriormente para el método doGet e importe las dependencias necesarias:
.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("The time is now: " + new DateTime().toString());
}
Recargue la página de prueba y la salida ahora debería ser:
La hora es ahora: 2012-03-03T14: 14: 29.890-05: 00
Ahora, si desea jugar con Servlet 3.0 y las anotaciones, esto no está habilitado de forma predeterminada, por lo que no sé. Primero obligue a Maven a usar Java 1.6 agregando esto a su pom, de lo contrario, cada vez que actualice su pom, la configuración volverá a Java 1.5.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
Abrir las propiedades del proyecto -> Facetas del proyecto. Cambie la Versión en "Módulo Web Dinámico" a 3.0, cambie la versión 1.6 de Java
Cree un nuevo Servlet con el nombre de clase AnnotatedServlet en src / main / java y observe cómo se crea automáticamente la anotación @WebServlet.
Opción 2: Crear proyecto web dinámico y luego agregar Maven Nature
- Seleccione Tomcat Runtime y Dynamic Module versión 3.0
- Crear carpeta de origen src / main / java
- Establecer destino / clases de salida por defecto
- Establecer directorio de contexto src / main / webapp
- Compruebe generar web.xml
- Crear servlet con mapeo / * para pruebas rápidas
- Agregue una declaración de salida al método doGet
response.getWriter().println("Another test");
Haga doble clic en el "Descriptor de implementación" y agregue este atributo a la aplicación web raíz
metadata-complete="false"
Haga clic derecho en el proyecto y seleccione Ejecutar como -> Ejecutar en el servidor
- Haga clic derecho en proyecto -> Configurar -> Convertir a proyecto Maven
- Selecciona el embalaje como guerra.
- Edite pom y configure el compilador para usar java 1.6 y agregue la dependencia de joda-time:
.
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
Haga clic derecho en el proyecto web en el Explorador de proyectos y luego elija Maven -> Actualizar proyecto
Me enfrenté a un problema similar y, aunque había configurado Deployment Assembly correctamente, todavía no funcionaba. Luego descubrí que en Ventana -> Preferencias -> Mi Eclipse -> Proyecto Java Enterprise -> Proyecto Web, en la pestaña Implementación, se desactivó la administración de los proyectos Dependientes. Lo cambié para implementar tarros de proyectos dependientes en la carpeta lib y luego todo funcionó a la perfección. Incluso podría desactivar la opción de montaje de implementación.
Verifique el Ensamblaje de Implementación (menú de contexto en el proyecto), debe haber mapeado de Dependencias de Maven -> WEB-INF / lib .