Errore "attributo webxml obbligatorio" in Maven


318

Ricevo il seguente errore:

Errore durante l'assemblaggio di WAR: è richiesto l'attributo webxml (o WEB-INF / web.xml preesistente se eseguito in modalità di aggiornamento)

Ho ottenuto web.xmlnel posto giusto che èprojectname\src\main\webapp\WEB-INF\web.xml

Che cosa potrebbe causare questo?


1
il tuo packaging è pronto per la guerra?
Crowne,

Stavo affrontando lo stesso problema e l'aggiornamento della versione del plugin lo ha risolto.
TechnocratSid

Risposte:


359

Sarebbe utile se puoi fornire uno snippet di codice del tuo plugin maven-war. Sembra che web.xmlsia nel posto giusto, tuttavia puoi provare a dare esplicitamente la posizione

<plugin>            
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <webXml>src\main\webapp\WEB-INF\web.xml</webXml>        
  </configuration>
</plugin>

36
Ha funzionato anche per me, grazie. Ma qual è la posizione predefinita in cui Maven cerca?
Buffalo,

5
Ho appena aggiornato il plugin di guerra di Maven dalla 2.1.1 alla 2.4 e la necessità di rendere esplicita la posizione predefinita è sparita.
xverges,

2
Potresti voler aggiornare la tua risposta per gli utenti IDEA di ItelliJ: IntelliJ crea un'altra struttura di progetto in modo che sia <webXml> web \ WEB-INF \ web.xml </webXml>
Vic Torious

ho provato la tua risposta ma ho comunque riscontrato lo stesso errore invece che ho fatto questo "C: \ Users \ xxxx \ Videos \ maven-projects \ my-project \ src \ webapp \ WEB-INF" e ha funzionato bene. Non so quale sia il problema. È mia fortuna Grazie
Bunny Joel,

1
Ha funzionato alla grande!
Grazie

145
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

Questa soluzione funziona per me (avevo già usato 2.2). Inoltre, sto usando Java Based Configuration per Servlet 3.0 e non ho bisogno di avere il file web.xml.


Le versioni 3.x di quel plug-in ora hanno default su failOnMissingWebXml false. Quindi, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> dovrebbe bastare.
Eisenknurr,

ha funzionato per me come ero e sto ancora usando jboss-web.xml - grazie!
JGlass

Ho un progetto che non ha web.xml e questo ha funzionato per me. La build di Maven ha esito positivo.
blueSky

81

Funziona perfettamente anche per me.

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

4
Qui sopra funziona quando le sfaccettature sono abilitate e WebContent è la cartella in cui si trova web.xml.
Ram


23

Se si sta eseguendo la migrazione da una configurazione basata su XML a una basata su Java e è stata rimossa la necessità di web.xml implementando WebApplicationInitializer, è sufficiente rimuovere il requisito per la presenza del file web.xml.

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

una risposta simile è stata data prima
Paul Verest,

Questo dà un contesto, dove esattamente deve andare la linea.
pippo

20

Il valore del mio tag webXml doveva apparire così per funzionare:

<webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 

Esattamente! Non riuscivo a capirlo fino a quando non ho visto che avevo solo una barra all'inizio <warSourceDirectory>\src\main\webapp</warSourceDirectory>non funziona! Non in v2.6
Adam,

19

Ho avuto lo stesso identico problema e l'ho risolto in questo modo:

Crea una nuova cartella denominata WEB-INFsottosrc/main/webbapp poi

Fare clic con il tasto destro del mouse sul progetto -> Strumenti Java EE -> Genera stub descrittore di distribuzione

Questo dovrebbe generare il tuo web.xml

Spero che questo aiuti risolvendo il tuo problema: D


13

Sembra che tu abbia web.xml nella posizione giusta, ma anche così, questo errore è spesso causato dalla struttura della directory che non corrisponde a ciò che Maven si aspetta di vedere. Ad esempio, se inizi con una webapp Eclipse che stai provando a creare con Maven.

In questo caso, una soluzione rapida è creare a
src/main/javae a
src/main/webapp directory (e altre directory se ne hai bisogno) e semplicemente spostare i tuoi file.

Ecco una panoramica del layout della directory di Maven: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html


6

Se si modifica il percorso predefinito del progetto, è necessario specificare la posizione del file web.xml, ad esempio:

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

6

Come da documentazione, dice: Se fallire o meno la compilazione se manca il file web.xml. Impostare su false se si desidera che WAR sia compilato senza un file web.xml. Questo può essere utile se stai costruendo un overlay che non ha file web.xml. Il valore predefinito è: vero. La proprietà dell'utente è: failOnMissingWebXml.

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

Spero che sia più chiaro


5

Ha funzionato anche per me.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>WebContent\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>

Funziona, ma i registri ora dice: WEB-INF\web.xml already added, skipping. È strano, quando non aggiungo questo, ho ricevuto l'errore.
erwineberhard,

Lo stesso di erwineberhard. WEB-INF\web.xml already added, skipping
Prachi,

4

mvn-war-plugin 2.3 corregge questo:

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

4

Ho avuto lo stesso errore sul server di prova ma non in locale. Dopo alcuni minuti, ho scoperto che l'IDE non era sincronizzato con pom.xml. Ecco come lo risolvo:

Rigenerare il descrittore di distribuzione con Eclipse

  1. Fare clic con il tasto destro sulla cartella del progetto
  2. Nel menu contestuale, selezionare "Strumenti Java EE", quindi "Genera stub descrittore di distribuzione" Genera web.xml
  3. Creerà il web.xml. web.xml nella struttura del progetto

Rigenerare il descrittore di distribuzione con IntelliJ

  1. Fare clic con il tasto destro sulla cartella del progetto
  2. Nel menu contestuale, selezionare "Apri le impostazioni del modulo", quindi fare clic su + per aggiungere il descrittore di distribuzione Web. Genera il descrittore di distribuzione
  3. Quindi è possibile modificare il percorso del descrittore o delle directory di risorse Web e sul lato destro.
  4. Quindi otterrai qualcosa del tipo: Struttura del progetto

1
e in netbeans dovresti: fare clic con il tasto destro sul nodo del progetto> Nuovo> Altro> Web> Descrittore di distribuzione standard (web.xml).
squallido il

2

Assicurarsi che pom.xml sia posizionato correttamente nella cartella Progetto. e non all'interno della cartella di destinazione o in qualsiasi altro luogo.

Sembra che pom.xml non sia relativamente allineato.


2

La struttura delle cartelle è stata modificata, quindi il file non è più in /src/main/webapp/WEB-INF/web.xml ?

Per risolvere questo problema, ho dato alla mia cartella web il nome webapp e l'ho inserito all'interno di src / main. Maven sembra cercare web.xml per impostazione predefinita in /src/main/webapp/WEB-INF/web.xml . Se lo fai, non è necessario dire esplicitamente a maven dove si trova web.xml. E se hai modificato la struttura delle cartelle e la tua build di recente ha smesso di funzionare, questo potrebbe essere il motivo.

Nota: questo è un vecchio post, ma le soluzioni pubblicate non indicano perché una build funzionante smetterebbe improvvisamente di funzionare.


2

Ci sono molte risposte e la maggior parte funzionerà, ma aggiungerò un altro punto, che, penso, non ha meno importanza.
In base al tuo messaggio di registro, stai utilizzando maven. Maven è uno strumento di gestione del progetto basato su alcune convenzioni. Costruisce il progetto, crea la struttura di directory corretta e posiziona i file nelle directory corrispondenti a cui è conforme Sun Microsystems Directory Structure Standardper le applicazioni Java EE / Web.

Puoi incorporare molte cose, tra cui plugin di Maven, cambiare / riconfigurare la directory radice del progetto, ecc., Ma c'è un semplice passo che puoi fare e il tuo progetto dovrebbe andare bene. Basta posizionare il tuo web.xmlunder src\main\webapp\WEB-INF\e provare a costruire il progetto conmvn package .

Spero che questo aggiunga un po 'più di luce a questo problema.


1

Questo errore si verifica perché dici a Maven di creare file in guerra .

<packaging>war</packaging>

Hai davvero bisogno della guerra? Altrimenti, metti il ​​barattolo lì. Ecco il codice 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>

jar e war sono storie completamente diverse. Penso che qui sia necessaria la guerra, poiché l'archivio viene distribuito nel contenitore Web e non viene eseguito separatamente come applicazione jar autonoma.
Giorgi Tsiklauri,

1

🔴 failOnMissingWebXml dal 2020

Tutte le altre risposte su potrebbero essere obsolete perché il valore predefinito utilizzato dal plugin maven-war è cambiato :

A partire da 3.1.0, questa proprietà viene impostata su false se il progetto dipende dall'API Servlet 3.0 o più recente.

Quindi l' unica cosa che devi fare è aggiungere

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

Esempio:

<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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.