Fehler "Webxml-Attribut ist erforderlich" in Maven

318

Ich erhalte die folgende Fehlermeldung:

Fehler beim Zusammenstellen von WAR: Das Attribut webxml ist erforderlich (oder bereits vorhandenes WEB-INF / web.xml, wenn es im Aktualisierungsmodus ausgeführt wird).

Ich bin web.xmlam richtigen Ortprojectname\src\main\webapp\WEB-INF\web.xml

Was könnte das verursachen?

user617966
quelle
1
Ist Ihre Verpackung im Pom in den Krieg gezogen?
Crowne
Ich hatte das gleiche Problem und die Aktualisierung der Plugin-Version löste es.
TechnocratSid

Antworten:

359

Es wäre hilfreich, wenn Sie ein Code-Snippet Ihres Maven-War-Plugins bereitstellen könnten. Sieht so aus, als wäre das web.xmlam richtigen Ort, aber Sie können trotzdem versuchen, den Ort explizit anzugeben

<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
quelle
36
Hat auch für mich gearbeitet, danke. Aber wo sucht Maven standardmäßig?
Buffalo
5
Ich habe gerade das Maven War Plugin von 2.1.1 auf 2.4 aktualisiert und die Notwendigkeit, den Standardspeicherort explizit anzugeben, wen entfernt.
Xverges
2
Möglicherweise möchten Sie Ihre Antwort für ItelliJ IDEA-Benutzer aktualisieren. - IntelliJ erstellt eine andere Projektstruktur, sodass es sich um <webXml> web \ WEB-INF \ web.xml </ webXml>
Vic Torious handelt
Ich habe Ihre Antwort versucht, aber trotzdem den gleichen Fehler erhalten. Stattdessen habe ich "C: \ Benutzer \ xxxx \ Videos \ maven-Projekte \ mein-Projekt \ src \ webapp \ WEB-INF" ausgeführt und gut funktioniert. Ich weiß nicht, was das Problem ist. Es ist mein Glück. Vielen Dank
Bunny Joel
1
Hat super funktioniert! Thx :)
yanike
145
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

Diese Lösung funktioniert für mich (ich habe vorher 2.2 verwendet). Außerdem verwende ich Java Based Configuration für Servlet 3.0 und benötige keine web.xml-Datei.

srv
quelle
Die Versionen 3.x dieses Plugins haben jetzt standardmäßig failOnMissingWebXml false. Sollte also <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> ausreichen.
Eisenknurr
arbeitete für mich so wie ich war und benutze immer noch jboss-web.xml - danke!
JGlass
Ich habe ein Projekt ohne web.xml, und das hat bei mir funktioniert. Maven Build ist erfolgreich.
blueSky
81

Es funktioniert auch perfekt für mich.

<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
quelle
4
Oben funktioniert, wenn Facetten aktiviert sind und WebContent der Ordner ist, in den web.xml eingeht.
Ram
32

Dies liegt daran, dass Sie web.xml nicht in Ihr Webprojekt aufgenommen haben und versuchen, mit maven Krieg zu führen. Um diesen Fehler zu beheben, müssen Sie die Funktion failOnMissingWebXml in der Datei pom.xml auf false setzen .

Zum Beispiel:

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

Weitere Informationen finden Sie im Blog: https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html

Ankur Jain
quelle
23

Wenn Sie von einer XML-basierten zu einer Java-basierten Konfiguration migrieren und die Notwendigkeit von web.xml durch die Implementierung von WebApplicationInitializer beseitigt haben, entfernen Sie einfach die Anforderung, dass die Datei web.xml vorhanden sein muss.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        ... 
    </configuration>
Beatty
quelle
ähnliche Antwort wurde vor gegeben
Paul Verest
Dieser gibt den Kontext an, in den genau die Linie gehen muss.
foo
20

Der Wert meines webXml-Tags musste folgendermaßen aussehen, damit er funktioniert:

<webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 
BoneGoat
quelle
genau! Konnte es nicht herausfinden, bis ich sah, dass ich am Anfang nur einen Schrägstrich hatte, <warSourceDirectory>\src\main\webapp</warSourceDirectory>funktioniert nicht! Nicht in v2.6
Adam
19

Ich hatte genau das gleiche Problem und habe es so gelöst:

Machen Sie einen neuen Ordner mit dem Namen WEB-INFunter src/main/webbappdann

Klicken Sie mit der rechten Maustaste auf Ihre Projekt -> Java EE Tools -> Generate Deployment Descriptor Stub

Dies sollte Ihre generieren web.xml

Ich hoffe, dies hilft bei der Lösung Ihres Problems: D.

Catalin Ciolocoiu
quelle
13

Es sieht so aus, als hätten Sie web.xml am richtigen Speicherort, aber dennoch wird dieser Fehler häufig dadurch verursacht, dass die Verzeichnisstruktur nicht mit den Erwartungen von Maven übereinstimmt. Wenn Sie beispielsweise mit einer Eclipse-Webanwendung beginnen, die Sie mit Maven erstellen möchten.

Wenn dies das Problem ist, besteht eine schnelle Lösung darin, ein
src/main/javaund ein
src/main/webappVerzeichnis (und andere Verzeichnisse, falls erforderlich) zu erstellen und einfach Ihre Dateien zu verschieben.

Hier ist eine Übersicht über das Layout des Maven-Verzeichnisses: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

MattC
quelle
6

Wenn Sie den Standardprojektpfad ändern, müssen Sie den Speicherort der Datei web.xml angeben, z. B.:

        <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
quelle
6

In der Dokumentation heißt es: Gibt an, ob der Build fehlschlagen soll, wenn die Datei web.xml fehlt. Setzen Sie diesen Wert auf false, wenn Sie möchten, dass WAR ohne eine web.xml-Datei erstellt wird. Dies kann nützlich sein, wenn Sie ein Overlay erstellen, das keine web.xml-Datei enthält. Der Standardwert ist: true. Die Benutzereigenschaft lautet: failOnMissingWebXml.

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

Hoffe es macht klarer

codechefvaibhavkashyap
quelle
5

Es hat auch bei mir funktioniert.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>WebContent\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>
Weinkaushik
quelle
Es funktioniert, aber in den Protokollen steht jetzt : WEB-INF\web.xml already added, skipping. Das ist komisch, wenn ich das nicht hinzufüge, habe ich den Fehler bekommen.
Erwineberhard
Gleich wie erwineberhard. WEB-INF\web.xml already added, skipping
Prachi
4

mvn-war-plugin 2.3 behebt dies:

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

Ich habe den gleichen Fehler auf dem Testserver gehabt, aber nicht auf lokaler Ebene. Nach einigen Minuten stellte ich fest, dass die IDE nicht mit der Datei pom.xml synchronisiert war. So löse ich es:

Generieren Sie den Bereitstellungsdeskriptor mit Eclipse neu

  1. Klicken Sie mit der rechten Maustaste auf Ihren Projektordner
  2. Wählen Sie im Kontextmenü "Java EE Tools" und dann "Generate Deployment Descriptor Stub". Generieren Sie web.xml
  3. Es wird die web.xml erstellt. web.xml in der Projektstruktur

Generieren Sie den Bereitstellungsdeskriptor mit IntelliJ neu

  1. Klicken Sie mit der rechten Maustaste auf Ihren Projektordner
  2. Wählen Sie im Kontextmenü "Moduleinstellungen öffnen" und klicken Sie auf das +, um den Webbereitstellungsdeskriptor hinzuzufügen. Generieren Sie den Bereitstellungsdeskriptor
  3. Anschließend können Sie den Pfad zu Ihrem Deskriptor oder den Webressourcenverzeichnissen und auf der rechten Seite ändern .
  4. Dann bekommen Sie so etwas wie: Projektstruktur
KeyMaker00
quelle
1
In NetBeans würden Sie: mit der rechten Maustaste auf den Projektknoten> Neu> Andere> Web> Standard Deployment Descriptor (web.xml) klicken.
schäbig
2

Stellen Sie sicher, dass pom.xml ordnungsgemäß im Projektordner abgelegt ist. und nicht im Zielordner oder irgendwo anders.

Es sieht so aus, als ob pom.xml nicht relativ ausgerichtet ist.

Meghashyam
quelle
2

Wurde Ihre Ordnerstruktur geändert, sodass sich die Datei nicht mehr unter /src/main/webapp/WEB-INF/web.xml befindet ?

Um dieses Problem zu beheben, habe ich meinem Webordner den Namen webapp gegeben und ihn in src / main abgelegt. Maven scheint standardmäßig unter /src/main/webapp/WEB-INF/web.xml nach web.xml zu suchen . Wenn Sie dies tun, müssen Sie maven nicht explizit mitteilen, wo sich web.xml befindet. Und wenn Sie Ihre Ordnerstruktur geändert haben und Ihr Build kürzlich nicht mehr funktioniert, könnte dies der Grund sein.

Hinweis: Dies ist ein alter Beitrag, aber die veröffentlichten Lösungen zeigen nicht auf, warum ein funktionierender Build plötzlich nicht mehr funktioniert.

Usman Mutawakil
quelle
2

Es gibt viele Antworten und die meisten werden funktionieren, aber ich werde noch einen Punkt hinzufügen, der meiner Meinung nach nicht weniger wichtig ist.
Entsprechend Ihrer Protokollnachricht verwenden Sie maven. Maven ist ein Projektmanagement-Build-Tool, das auf einigen Konventionen basiert. Es erstellt das Projekt, erstellt die richtige Verzeichnisstruktur und legt Dateien in entsprechenden Verzeichnissen ab, die Sun Microsystems Directory Structure Standardfür Java EE / Webanwendungen kompatibel sind .

Sie können viele Dinge einbeziehen, einschließlich Maven-Plugins, Ändern / Neukonfigurieren des Projektstammverzeichnisses usw., aber Sie können einen einfachen Schritt ausführen, und Ihr Projekt sollte in Ordnung sein. Platzieren Sie einfach Ihre web.xmlUnter src\main\webapp\WEB-INF\und versuchen Sie, das Projekt mit zu bauen mvn package.

Ich hoffe, dass dies diesem Problem etwas mehr Licht verleiht.

Giorgi Tsiklauri
quelle
1

Dieser Fehler tritt auf, weil Sie Maven anweisen, Dateien in den Krieg zu ziehen .

<packaging>war</packaging>

Brauchen Sie wirklich Krieg? Wenn nicht, stellen Sie das Glas dort hin. Hier ist der vollständige Code:

<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
quelle
Glas und Krieg sind völlig unterschiedliche Geschichten. Ich denke, hier ist Krieg erforderlich, da das Archiv in einem Webcontainer bereitgestellt wird und nicht separat als eigenständige JAR-Anwendung ausgeführt wird.
Giorgi Tsiklauri
1

🔴 failOnMissingWebXml seit 2020

Alle anderen Antworten zu sind möglicherweise veraltet, da sich der vom Maven-War-Plugin verwendete Standardwert geändert hat :

Ab 3.1.0 ist diese Eigenschaft standardmäßig false, wenn das Projekt von der Servlet 3.0-API oder einer neueren Version abhängt.

Also das einzige , was Sie tun müssen, ist hinzuzufügen ,

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

Beispiel:

<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>
Grimmig
quelle