Erreur «l'attribut webxml est requis» dans Maven

318

Je reçois l'erreur suivante:

Erreur lors de l'assemblage de WAR: l'attribut webxml est requis (ou WEB-INF / web.xml préexistant en cas d'exécution en mode de mise à jour)

Je suis web.xmlau bon endroit qui estprojectname\src\main\webapp\WEB-INF\web.xml

Qu'est-ce qui peut causer cela?

user617966
la source
1
votre emballage est-il prêt à faire la guerre au pom?
crowne
J'étais confronté au même problème et la mise à jour de la version du plugin l'a résolu.
TechnocratSid

Réponses:

359

Il serait utile que vous puissiez fournir un extrait de code de votre plugin maven-war. On dirait que le web.xmlest au bon endroit, vous pouvez toujours essayer de donner l'emplacement explicitement

<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
la source
36
A travaillé pour moi aussi, merci. Mais quel est l'emplacement par défaut où Maven recherche?
Buffalo
5
Je viens de mettre à jour le plugin maven war de 2.1.1 à 2.4 et la nécessité d'expliciter l'emplacement par défaut.
xverges
2
Vous voudrez peut-être mettre à jour votre réponse pour les utilisateurs d'ItelliJ IDEA - IntelliJ crée une autre structure de projet afin qu'elle soit <webXml> web \ WEB-INF \ web.xml </webXml>
Vic Torious
J'ai essayé votre réponse mais j'ai toujours eu la même erreur au lieu de cela. J'ai fait ceci "C: \ Users \ xxxx \ Videos \ maven-projects \ my-project \ src \ webapp \ WEB-INF" et j'ai bien fonctionné. Je ne sais pas quel est le problème. C'est ma chance. Merci
Bunny Joel
1
Fonctionne très bien! Thx :)
yanike
145
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

Cette solution fonctionne pour moi (j'utilisais 2.2 auparavant). En outre, j'utilise la configuration basée sur Java pour Servlet 3.0 et je n'ai pas besoin de fichier web.xml.

srv
la source
Les versions 3.x de ce plugin ont désormais failOnMissingWebXml par défaut false. Donc, ça <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> devrait suffire.
Eisenknurr
travaillé pour moi comme je l'étais et utilise toujours jboss-web.xml - merci!
JGlass
J'ai un projet qui n'a pas web.xml, et cela a fonctionné pour moi. La construction de Maven est réussie.
blueSky
81

Cela fonctionne parfaitement pour moi aussi.

<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
la source
4
Ci-dessus fonctionne lorsque les facettes sont activées et WebContent est le dossier dans lequel web.xml entre.
Ram
32

Cela est dû au fait que vous n'avez pas inclus web.xml dans votre projet Web et que vous essayez de créer une guerre à l'aide de maven. Pour résoudre cette erreur, vous devez définir le failOnMissingWebXml sur false dans le fichier pom.xml.

Par exemple:

<properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>   
</properties>

Veuillez consulter le blog pour plus de détails: https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html

Ankur jain
la source
23

Si vous migrez d'une configuration basée sur XML vers une configuration basée sur Java et que vous avez supprimé le besoin de web.xml en implémentant WebApplicationInitializer, supprimez simplement l'exigence de présence du fichier web.xml.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        ... 
    </configuration>
Beatty
la source
une réponse similaire a été donnée auparavant
Paul Verest
Celui-ci donne le contexte, où exactement la ligne doit aller.
foo
20

La valeur de ma balise webXml devait ressembler à ceci pour fonctionner:

<webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 
BoneGoat
la source
exactement! Je ne pouvais pas le comprendre avant d'avoir vu que je n'avais qu'une barre oblique au début <warSourceDirectory>\src\main\webapp</warSourceDirectory>ne fonctionne pas! Pas dans la v2.6
Adam
19

J'ai eu exactement le même problème et je l'ai résolu comme ceci:

Créez un nouveau dossier nommé WEB-INFsoussrc/main/webbapp puis

Clic droit sur votre projet -> Outils Java EE -> Générer un stub de descripteur de déploiement

Cela devrait générer votre web.xml

J'espère que cela vous aidera en résolvant votre problème: D

Catalin Ciolocoiu
la source
13

Il semble que vous ayez web.xml au bon endroit, mais même ainsi, cette erreur est souvent causée par la structure de répertoire qui ne correspond pas à ce que Maven s'attend à voir. Par exemple, si vous commencez avec une webapp Eclipse que vous essayez de créer avec Maven.

Si tel est le problème, une solution rapide consiste à créer un
src/main/javaet un
src/main/webapprépertoire (et d'autres répertoires si vous en avez besoin) et à simplement déplacer vos fichiers.

Voici un aperçu de la disposition du répertoire maven: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

MattC
la source
6

Si vous modifiez le chemin du projet par défaut, vous devez spécifier l'emplacement du fichier web.xml, par exemple:

        <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
la source
6

Selon la documentation, il est indiqué: s'il faut ou non échouer la génération si le fichier web.xml est manquant. Définissez-le sur false si vous souhaitez que WAR soit construit sans fichier web.xml. Cela peut être utile si vous créez une superposition sans fichier web.xml. La valeur par défaut est: true. La propriété utilisateur est: failOnMissingWebXml.

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

J'espère que cela rend plus clair

codechefvaibhavkashyap
la source
5

Il a travaillé pour moi aussi.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>WebContent\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>
Vineet kaushik
la source
Il fonctionne, mais les journaux dit maintenant: WEB-INF\web.xml already added, skipping. C'est bizarre, quand je n'ajoute pas cela, j'ai eu l'erreur.
erwineberhard
Identique à erwineberhard. WEB-INF\web.xml already added, skipping
Prachi
4

mvn-war-plugin 2.3 corrige ceci:

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

J'ai eu la même erreur sur le serveur de test mais pas en local. Après quelques minutes, j'ai découvert que l'EDI n'était pas synchronisé avec le pom.xml. Voici comment je le résous:

Re-générer le descripteur de déploiement avec Eclipse

  1. Faites un clic droit sur votre dossier de projet
  2. Dans le menu contextuel, choisissez "Java EE Tools" puis "Generate Deployment Descriptor Stub" Générer web.xml
  3. Il créera le web.xml. web.xml dans la structure du projet

Re-générer le descripteur de déploiement avec IntelliJ

  1. Faites un clic droit sur votre dossier de projet
  2. Dans le menu contextuel, choisissez "Ouvrir les paramètres du module", puis cliquez sur le + pour ajouter le descripteur de déploiement Web. Générez le descripteur de déploiement
  3. Ensuite, vous pouvez modifier le chemin d'accès à votre descripteur ou aux répertoires de ressources Web et sur le côté droit.
  4. Ensuite, vous obtiendrez quelque chose comme: Structure du projet
KeyMaker00
la source
1
et dans les netbeans, vous devez: cliquer avec le bouton droit sur le nœud du projet> Nouveau> Autre> Web> Descripteur de déploiement standard (web.xml).
minable
2

Assurez-vous que pom.xml est placé correctement dans le dossier Project. et non dans le dossier cible ou ailleurs.

Il semble que pom.xml ne soit pas relativement aligné.

Meghashyam
la source
2

La structure de votre dossier a-t-elle été modifiée afin que le fichier ne soit plus dans /src/main/webapp/WEB-INF/web.xml ?

Pour résoudre ce problème, j'ai donné à mon dossier Web le nom de webapp et l'ai placé dans le src / main. Maven semble rechercher par défaut web.xml dans /src/main/webapp/WEB-INF/web.xml . Si vous faites cela, vous n'avez pas besoin de dire explicitement à maven où se trouve web.xml. Et si vous avez modifié la structure de vos dossiers et que votre build a récemment cessé de fonctionner, cela pourrait être la raison.

Remarque: il s'agit d'un ancien article, mais les solutions publiées ne montrent pas pourquoi une version fonctionnelle s'arrêterait soudainement.

Usman Mutawakil
la source
2

Il existe de nombreuses réponses et la plupart d'entre elles fonctionneront, mais j'ajouterai un point supplémentaire qui, je pense, n'a pas moins d'importance.
Selon votre message de journal, vous utilisez maven. Maven est un outil de gestion de projet-construction basé sur certaines conventions. Il construit le projet, crée la structure de répertoires appropriée et place les fichiers dans les répertoires correspondants qui sont conformes aux applications Sun Microsystems Directory Structure StandardJava EE / Web.

Vous pouvez incorporer beaucoup de choses, y compris des plugins maven, changer / reconfigurer le répertoire racine du projet, etc., mais il y a une étape simple que vous pouvez faire et votre projet devrait aller bien. Placez simplement votre web.xmlsous src\main\webapp\WEB-INF\et essayez de construire le projet avecmvn package .

J'espère que cela ajoute un peu plus de lumière à ce problème.

Giorgi Tsiklauri
la source
1

Cette erreur se produit car vous dites à Maven de pakage des fichiers en guerre .

<packaging>war</packaging>

Avez-vous vraiment besoin de la guerre? Sinon, mettez le pot là-bas. Voici le code complet:

<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
la source
pot et guerre sont des histoires complètement différentes. Je pense que la guerre est nécessaire ici, car l'archive est déployée sur le conteneur Web et n'est pas exécutée séparément en tant qu'application jar autonome.
Giorgi Tsiklauri
1

🔴 failOnMissingWebXml depuis 2020

Toutes les autres réponses peuvent être obsolètes car la valeur par défaut utilisée par le plugin maven-war a changé :

Depuis la version 3.1.0, cette propriété a la valeur false par défaut si le projet dépend de l'API Servlet 3.0 ou d'une version plus récente.

Ainsi , la SEULE chose que vous avez à faire est d'ajouter

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

Exemple:

<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>
Sinistre
la source