2012-03-02 27 views
20

Estoy tratando de 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. Luego habilité el soporte de Maven y agregué logback a mi pom. Puse una declaración de registro en el método doGet del servlet. Al ejecutar el servlet, se queja de que no puede encontrar ningún enlace porque los archivos de inicio de sesión no se están copiando en la instancia de Eclipse tomcat. Yo esperaba encontrar los frascos publicados en algún lugar aquí:Eclipse WTP no publica las dependencias de Maven

${workspace}\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\

¿Cómo llego a trabajar con Eclipse WTP/Maven correctamente? También intenté instalar el conector m2e-wtp sin ninguna diferencia.

Respuesta

48

Comprobar Asamblea de despliegue (menú contextual de proyecto), no debe ser la cartografía Maven Dependencias -> WEB-INF/lib.

+0

Gracias por la punta, esto se ha configurado correctamente pero no funciona. Eventualmente descubrí que crear un nuevo proyecto desde cero funcionaba. En este caso, creé el proyecto y luego agregué el conector Maven WTP y no configuré el proyecto correctamente. – dcompiled

+2

Tuve un problema un poco diferente, pero esto lo solucionó. Estaba usando Maven para construir mi proyecto que contenía SNAPSHOTS. Originalmente tenía habilitada la Resolución de espacio de trabajo y la apagué. Eclipse se configuró para seguir usando el proyecto local y no las instantáneas de nuestro repositorio de nexus. Seguí recibiendo CNFE y encontré esto que me señaló el problema de que aún intentaba resolverlo y no publicarlo. – bh5k

+0

esto me ayudó mucho y en otro caso :) (similar) – Alex

13

Procedente de un fondo ASP.NET, considero impactante la cantidad de trabajo que se requiere para ejecutar una aplicación web con Eclipse WTP y Maven, especialmente si está aprendiendo por su cuenta. Esperemos que esta guía de inicio rápido ayude a alguien a ponerse al día rápidamente.

Hay dos maneras de obtener un proyecto de hello world trabajando 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

configuración de inicio

  • Instalar copia de Tomcat 7 de http://tomcat.apache.org/download-70.cgi

  • Ventana -> Preferencias -> Servidor -> Runtime Environment

  • Añadir Apach e Tomcat 7.0 y seleccionar el directorio de instalación local

Opción 1: Crear Proyecto Web dinámica a continuación, añadir Maven Naturaleza

  • Crear nuevo proyecto Maven, seleccione arquetipo org.apache.maven.archetypes : maven-archetype-webapp

  • Cambiar a la perspectiva de Java EE.

  • Crear 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. src \ main \ java carpeta aparece después de src \ main \ resources. Esto se puede arreglar manualmente más tarde en las propiedades del proyecto.

  • Cree un nuevo servlet. Observe cómo Eclipse omite 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 de servlet están libres. A) podemos agregar el servlet api como una dependencia a nuestro proyecto o B) podemos enlazar a la configuración del servidor de Eclipse para Apache 7.0.

  • Para la opción A, agregue esta dependencia a la 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

    • Proyecto -> Java Build Path -> Bibliotecas -> Añadir Biblioteca -> Tiempo de ejecución del servidor -> Apache Tomcat 7.0
    • clic derecho y de ejecución en el servidor:
  • Debe aparecer una página en blanco en el navegador interno como http://localhost:8080/ $ {a rtifact}

Prueba de dependencia publicación:

  • Agregar joda-tiempo para el POM.

  • añadir esta línea en el servlet creado anteriormente para el método doGet e importar las dependencias necesarias:

.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.getWriter().println("The time is now: " + new DateTime().toString()); 
} 

Actualizar la página de prueba y la salida debe estar ahora:

Ahora: 2012-03-03T14: 14: 29,890 a 05: 00

Ahora bien, si Si quieres jugar con Servlet 3.0 y anotaciones, esto no está habilitado de manera predeterminada, por lo que no sé. Primero fuerce 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 Project Properties -> Project Facets. Cambie la versión en "Dynamic Web Module" a 3.0, cambie la versión java 1.6

Cree un nuevo servlet con nombre de clase AnnotatedServlet en src \ main \ java y observe cómo se crea automáticamente la anotación @WebServlet.

Opción 2: Crear un proyecto Web dinámica a continuación, añadir Maven Naturaleza

  • Seleccionar Tomcat tiempo de ejecución y el módulo dinámico de la versión 3.0
  • Crear carpeta de origen src \ \ Java principal
  • objetivo salida por defecto Conjunto \ clases
  • Establecer directorio de contexto src \ main \ webapp
  • Comprobar generar web.xml
  • Crear servlet con el mapeo/* para la prueba rápida
  • Añadir una instrucción de salida al método doGet

response.getWriter().println("Another test");

  • doble clic en el "descriptor de despliegue" y añadir este atributo a la raíz Elemento web-app metadata-complete="false"

  • Haga clic derecho en proyecto y seleccione Ejecutar como -> Ejecutar en el servidor

  • proyecto clic derecho -> Configuración -> Convertir en Proyecto Maven
  • Seleccionar envasado como la guerra
  • Editar pom y establecer compilador que utilice Java 1.6 y complemento tiempo joda dependencia:

.

<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> 
+1

Las cosas parecen ser mejores en estos días con las versiones más recientes de eclipse (mi proceso: crear nuevo proyecto maven, seleccionar la web arquetipo de aplicación, agregue las dependencias maven al ensamblaje de implementación como se describe en la respuesta aceptada aquí, que parece funcionar en general), pero el hecho de que esta pregunta aún sea relevante muestra que aún no es * perfecto *. Pero ni el sistema de aplicación web como existe ni el maven fueron diseñados con el uso de IDEs en mente, que es probablemente la razón por la que tenemos problemas como este. Mientras que todo en .NET fue diseñado para integrarse con VS muy bien. –

0

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 Despliegue, la administración de los proyectos dependientes estaba desactivada. Lo cambié para implementar tarros de proyectos dependientes en la carpeta lib y luego todo funcionó como un amuleto. Incluso podría desactivar la opción Implementación de implementación.

1

Haga clic derecho sobre el proyecto web en el Explorador de proyectos a continuación, elija Maven -> Proyecto de Actualización

Cuestiones relacionadas