2010-06-28 14 views
9

Durante la ejecución de mvn install, estoy consiguiendo error siguiente:error Maven mientras que la construcción del paquete WAR (? Web.xml falta ..)

Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)

Mi aplicación web árbol de estructura es así:

my-app 
|-- pom.xml 
|-- src 
    |-- ... 
    |-- WebContent 
     |-- ... 
     |-- META-INF 
     |-- WEB-INF 
      |-- classes 
       |-- ... 
      |-- lib 
      |-- **web.xml** 

Mi archivo POM se ve así:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>masters.traffic</groupId> 
    <artifactId>traffic_web</artifactId> 
    <packaging>war</packaging> 
    <name>traffic_web</name> 
    <version>0.1.0</version> 
    <build> 
     <sourceDirectory>src</sourceDirectory> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target>      
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    ... 
</project> 

Cómo corregir adecuadamente esa cuestión?

Saludos

Respuesta

19

I fuertemente recomiendo utilizar Maven's standard layout:

  • poner las fuentes de Java en src/main/java (y eliminar el elemento sourceDirectory)
  • poner las fuentes de la aplicación web en src/main/webapp
  • eliminar los classes y lib directorios bajo WEB-INF

Claro, usted puede personalizar el diseño de la OMI, pero esto es más problemas y esfuerzos inútiles que beneficios. Solo sigue las convenciones.

+0

¡Gracias! Pasé mucho tiempo averiguando por qué JSF no estaba procesando y tenía WEB-INF en un directorio diferente; luego, jugando con el archivo IDEA .iml lo conseguí trabajando agregando un descriptor de implementación para web.xml , lo que es extraño es que esto dejó de funcionar ... Supongo que ahora funcionará para siempre;) –

13

Supongo que maven-war-plugin está buscando src/main/webapp/WEB-INF/web.xml, pero no puede encontrarlo, y quiere que especifique explícitamente la ubicación (no estándar). Si no puede cambiar el nombre de WebContent a webapp y la mudanza en las src/main/ (recomendado), usted podría intentar añadir algo como esto a su <build>

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
    <webXml>${basedir}/src/WebContent/WEB-INF/web.xml</webXml> 
    <warSourceDirectory>${basedir}/src/WebContent</warSourceDirectory> 
    </configuration> 
</plugin> 
+0

¿Qué sucede si no tengo web.xml en mi aplicación web? – Vivek

+1

@Vivek agrega falso a la configuración – bigGuy

0

Me encontré con este problema recientemente y el problema fue que mi clase de recursos no especificaba una ruta inicial en la parte superior de la clase. Cada método especificaba una ruta, pero no había nada que especificara la ruta inicial.

Ejemplo:

@Path("/") 
public class MyResource { 

@GET 
@Produces("text/html") 
public String foo() { 
    return "foo"; 
} 

@GET 
@Path("pt") 
@Produces("text/html") 
public String bar() { 
    return "bar"; 
} 

funcionará bien. Pero,

public class MyResource { 

@GET 
@Produces("text/html") 
public String foo() { 
    return "foo"; 
} 

@GET 
@Path("pt") 
@Produces("text/html") 
public String bar() { 
    return "bar"; 
} 

voluntad no

-2

Estoy siguiendo el tutorial http://www.vogella.com/tutorials/REST/article.html y obtener lo siguiente cuando puedo implementar la aplicación CRUD final. Estoy usando el directorio WebContent y lo he configurado en mi complemento war. Estoy usando las versiones 1.19 Jersey y 3.1 servlet API.

04-Mar-2015 11:10:11.287 INFO [localhost-startStop-1] com.sun.jersey.api.core.ScanningResourceConfig.init No provider classes found. 
04-Mar-2015 11:10:11.429 INFO [localhost-startStop-1] com.sun.jersey.server.impl.application.WebApplicationImpl._initiate Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 05:39 AM' 
04-Mar-2015 11:10:12.102 SEVERE [localhost-startStop-1] com.sun.jersey.spi.inject.Errors.processErrorMessages The following errors and warnings have been detected with resource and/or provider classes: 
    SEVERE: Missing dependency for constructor public com.enigma.restful.TodoService(javax.ws.rs.core.UriInfo,javax.ws.rs.core.Request,java.lang.String) at parameter index 0 
    SEVERE: Missing dependency for constructor public com.enigma.restful.TodoService(javax.ws.rs.core.UriInfo,javax.ws.rs.core.Request,java.lang.String) at parameter index 1 
    SEVERE: Missing dependency for constructor public com.enigma.restful.TodoService(javax.ws.rs.core.UriInfo,javax.ws.rs.core.Request,java.lang.String) at parameter index 2 
0

Si está utilizando eclispe, asegúrese de clic derecho en el proyecto y crear un Maven "proyecto". Puede compilar como un lote desde la línea de comandos con actualizaciones usando mvn generate: archetype -B-cpu, pero es posible que tenga que estructurar manualmente algunas cosas. Con esto se ejecutará como una aplicación web o una aplicación cliente. Agregue este código a pom.xml.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
Cuestiones relacionadas