Error "Se requiere atributo webxml" en Maven

318

Estoy teniendo el siguiente error:

Error al ensamblar WAR: se requiere el atributo webxml (o WEB-INF / web.xml preexistente si se ejecuta en modo de actualización)

Tengo web.xmlen el lugar correcto que esprojectname\src\main\webapp\WEB-INF\web.xml

¿Qué podría estar causando esto?

usuario617966
fuente
1
¿Está su embalaje listo para la guerra en el pom?
crowne
Estaba enfrentando el mismo problema y la actualización de la versión del complemento lo resolvió.
TechnocratSid

Respuestas:

359

Sería útil si puede proporcionar un fragmento de código de su complemento maven-war-plugin. Parece que web.xmlestá en el lugar correcto, aún puede intentar dar la ubicación explícitamente

<plugin>            
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <webXml>src\main\webapp\WEB-INF\web.xml</webXml>        
  </configuration>
</plugin>
Arpit
fuente
36
También funcionó para mí, gracias. Pero, ¿cuál es la ubicación predeterminada donde Maven busca?
Buffalo
55
Acabo de actualizar el complemento Maven War de 2.1.1 a 2.4, y la necesidad de hacer explícita la ubicación predeterminada desapareció.
xverges
2
Es posible que desee actualizar su respuesta para los usuarios de ItelliJ IDEA: IntelliJ crea otra estructura de proyecto para que sea <webXml> web \ WEB-INF \ web.xml </webXml>
Vic Torious
probé su respuesta pero aún recibí el mismo error en lugar de eso hice esto "C: \ Users \ xxxx \ Videos \ maven-projects \ my-project \ src \ webapp \ WEB-INF" y funcionó bien. No sé cuál es el problema. Es mi suerte Gracias
Bunny Joel
1
Funcionó genial! Thx :)
Yanike
145
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

Esta solución funciona para mí (estaba usando 2.2 antes). Además, estoy usando la configuración basada en Java para Servlet 3.0 y no necesito tener el archivo web.xml.

srv
fuente
Las versiones 3.x de ese complemento ahora tienen failOnMissingWebXml predeterminado en false. Entonces, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> debería ser suficiente.
Eisenknurr
funcionó para mí tal como era y todavía estoy usando jboss-web.xml, ¡gracias!
JGlass
Tengo un proyecto que no tiene web.xml, y esto funcionó para mí. La construcción de Maven es exitosa.
blueSky
81

Funciona perfectamente para mí también.

<project>

.....

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webXml>WebContent\WEB-INF\web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
Burhan ARAS
fuente
44
Lo anterior funciona cuando las facetas están habilitadas y WebContent es la carpeta donde entra web.xml.
Ram
23

Si está migrando de una configuración basada en XML a una configuración basada en Java y ha eliminado la necesidad de web.xml mediante la implementación de WebApplicationInitializer, simplemente elimine el requisito de que el archivo web.xml esté presente.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        ... 
    </configuration>
Beatty
fuente
respuesta similar se dio antes
Paul Verest 01 de
Este da contexto, donde exactamente debe ir la línea.
foo
20

El valor de mi etiqueta webXml necesitaba verse así para funcionar:

<webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 
BoneGoat
fuente
¡exactamente! ¡No pude resolverlo hasta que vi que solo tenía un corte al principio <warSourceDirectory>\src\main\webapp</warSourceDirectory>no funciona! No en v2.6
Adam
19

Tuve exactamente el mismo problema y lo resolví así:

Hacer una nueva carpeta con el nombre WEB-INFbajo src/main/webbappa continuación,

Haga clic derecho en su proyecto -> Herramientas Java EE -> Generar trozo de descriptor de implementación

Esto debería generar su web.xml

Espero que esto ayude a resolver su problema: D

Catalin Ciolocoiu
fuente
13

Parece que tiene web.xml en la ubicación correcta, pero aun así, este error a menudo es causado por la estructura del directorio que no coincide con lo que Maven espera ver. Por ejemplo, si comienza con una aplicación web Eclipse que está intentando construir con Maven.

Si ese es el problema, una solución rápida es crear un
src/main/javay un
src/main/webappdirectorio (y otros directorios si los necesita) y simplemente mover sus archivos.

Aquí hay una descripción general del diseño del directorio maven: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

MattC
fuente
6

Si cambia la ruta predeterminada del proyecto, debe especificar la ubicación del archivo web.xml, por ejemplo:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <webXml>src\main\web\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>
johnander11
fuente
6

Según la documentación, dice: si se debe fallar o no la compilación si falta el archivo web.xml. Establézcalo en falso si desea que WAR esté construido sin un archivo web.xml. Esto puede ser útil si está creando una superposición que no tiene un archivo web.xml. El valor predeterminado es: verdadero. La propiedad del usuario es: failOnMissingWebXml.

<plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <extensions>false</extensions>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>            </plugin>

Espero que quede más claro

codechefvaibhavkashyap
fuente
5

A mí también me funcionó.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>WebContent\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>
Vineet kaushik
fuente
Funciona, pero los registros dice ahora: WEB-INF\web.xml already added, skipping. Eso es extraño, cuando no agrego esto, recibí el error.
erwineberhard
Igual que Erwineberhard. WEB-INF\web.xml already added, skipping
Prachi
4

mvn-war-plugin 2.3 corrige esto:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
        </plugin>
        ...
gabor
fuente
4

He tenido el mismo error en el servidor de prueba pero no en el local. Después de unos minutos, descubrí que el IDE no estaba sincronizado con el pom.xml. Así es como lo resuelvo:

Vuelva a generar el descriptor de implementación con Eclipse

  1. Haga clic derecho en la carpeta de su proyecto
  2. En el menú contextual, elija "Herramientas Java EE" y luego "Generar apéndice de descriptor de implementación" Generar web.xml
  3. Creará el web.xml. web.xml en la estructura del proyecto

Vuelva a generar el descriptor de despliegue con IntelliJ

  1. Haga clic derecho en la carpeta de su proyecto
  2. En el menú contextual, elija "Abrir configuración del módulo", luego haga clic en + para agregar el descriptor de implementación web. Generar el descriptor de despliegue
  3. Luego, puede cambiar la ruta a su descriptor o a los Directorios de recursos web y al lado derecho.
  4. Entonces obtendrás algo como: Estructura del proyecto
KeyMaker00
fuente
1
y en netbeans: haga clic derecho en el nodo del proyecto> Nuevo> Otro> Web> Descriptor de implementación estándar (web.xml).
mal estado el
2

Asegúrese de que pom.xml esté colocado correctamente en la carpeta Proyecto. y no dentro de la carpeta de destino o en cualquier otro lugar.

Parece que pom.xml no está relativamente alineado.

Meghashyam
fuente
2

¿Se alteró la estructura de su carpeta para que el archivo ya no esté en /src/main/webapp/WEB-INF/web.xml ?

Para resolver este problema, le di a mi carpeta web el nombre webapp y lo coloqué dentro de src / main. Maven parece buscar web.xml de forma predeterminada en /src/main/webapp/WEB-INF/web.xml . Si hace esto, entonces no necesita decirle explícitamente a maven dónde está web.xml. Y si ha alterado la estructura de su carpeta y su compilación dejó de funcionar recientemente, esta podría ser la razón.

Nota: Esta es una publicación anterior, pero las soluciones publicadas no indican por qué una compilación en funcionamiento dejaría de funcionar de repente.

Usman Mutawakil
fuente
2

Hay muchas respuestas y la mayoría de ellas funcionarán, pero agregaré un punto más, que, creo, no tiene menos importancia.
Según su mensaje de registro, lo está utilizando maven. Maven es una herramienta de gestión de proyectos que se basa en algunas convenciones. Construye el proyecto, crea una estructura de directorios adecuada y coloca los archivos en los directorios correspondientes que cumplen con Sun Microsystems Directory Structure Standardlas aplicaciones Java EE / Web.

Puede incorporar muchas cosas, incluidos los complementos de Maven, cambiar / reconfigurar el directorio raíz del proyecto, etc., pero hay un paso simple que puede hacer y su proyecto debería estar bien. Simplemente coloque su web.xmldebajo src\main\webapp\WEB-INF\e intente construir el proyecto con mvn package.

Espero que esto agregue un poco más de luz a este problema.

Giorgi Tsiklauri
fuente
1

Este error ocurre porque le dice a Maven que envíe los archivos a la guerra .

<packaging>war</packaging>

¿Realmente necesitas guerra? Si no, pon el frasco allí. Aquí está el código completo:

<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>
    <version>1.0-SNAPSHOT</version>

    <groupId>com.your.groupid</groupId>
    <artifactId>artifactid</artifactId>
    <packaging>jar</packaging>
Yuliia Ashomok
fuente
jar y war son historias completamente diferentes. Creo que la guerra es necesaria aquí, ya que el archivo se está implementando en el contenedor web y no se ejecuta por separado como una aplicación jar independiente.
Giorgi Tsiklauri
1

🔴 failOnMissingWebXml desde 2020

Todas las demás respuestas pueden ser obsoletas porque el valor predeterminado utilizado por el complemento de guerra de maven cambió :

A partir de 3.1.0, esta propiedad por defecto es falsa si el proyecto depende de la API de Servlet 3.0 o posterior.

Entonces, lo ÚNICO que tienes que hacer es agregar

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

Ejemplo:

<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>foo</groupId>
    <artifactId>bar</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <tomcat.ignorePackaging>true</tomcat.ignorePackaging>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
Severo
fuente