Galat "atribut webxml diperlukan" di Maven

318

Saya mendapatkan kesalahan berikut:

Galat saat merakit WAR: atribut webxml diperlukan (atau WEB-INF / web.xml yang sudah ada jika dijalankan dalam mode pembaruan)

Saya sudah berada web.xmldi tempat yang tepatprojectname\src\main\webapp\WEB-INF\web.xml

Apa yang menyebabkan ini?

pengguna617966
sumber
1
Apakah kemasan Anda siap untuk perang di pom?
crowne
Saya menghadapi masalah yang sama dan memperbarui versi plugin menyelesaikannya.
TechnocratSid

Jawaban:

359

Akan sangat membantu jika Anda dapat memberikan potongan kode maven-war-plugin Anda. Sepertinya web.xmlada di tempat yang tepat, Anda masih dapat mencoba dan memberikan lokasi secara eksplisit

<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
sumber
36
Bekerja untuk saya juga, terima kasih. Tapi apa lokasi default tempat pencarian Maven?
Buffalo
5
Saya baru saja memperbarui plugin perang pakar 2.1.1 ke 2.4, dan kebutuhan untuk membuat eksplisit lokasi default pergi.
xverges
2
Anda mungkin ingin memperbarui jawaban Anda untuk pengguna ItelliJ IDEA - IntelliJ membuat struktur proyek lain sehingga itu akan menjadi <webXml> web \ WEB-INF \ web.xml </webXml>
Vic Torious
mencoba jawaban Anda tetapi masih mendapat kesalahan yang sama daripada yang saya lakukan ini "C: \ Users \ xxxx \ Video \ maven-proyek \ my-project \ src \ webapp \ WEB-INF" dan bekerja dengan baik. Saya tidak tahu apa masalahnya. Ini adalah keberuntunganku. Terima kasih
Kelinci Joel
1
Bekerja dengan baik! Thx :)
yanike
145
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

Solusi ini berfungsi untuk saya (saya menggunakan 2.2 sebelumnya). Juga, saya menggunakan Konfigurasi Berbasis Java untuk Servlet 3.0 dan tidak perlu memiliki file web.xml.

srv
sumber
Versi 3.x dari plugin itu sekarang memiliki failOnMissingWebXml default false. Jadi, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> sudah cukup.
Eisenknurr
bekerja untuk saya seperti saya dulu dan masih menggunakan jboss-web.xml - terima kasih!
JGlass
Saya punya proyek yang tidak memiliki web.xml, dan ini berhasil bagi saya. Membangun Maven berhasil.
blueSky
81

Ini bekerja dengan baik untuk saya juga.

<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
sumber
4
Di atas berfungsi ketika aspek diaktifkan dan WebContent adalah folder tempat web.xml masuk
Ram
32

Ini karena Anda belum memasukkan web.xml dalam proyek web Anda dan mencoba membangun perang menggunakan pakar. Untuk mengatasi kesalahan ini, Anda perlu mengatur failOnMissingWebXml ke false di file pom.xml.

Sebagai contoh:

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

Silakan lihat blog untuk detail lebih lanjut: https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html

Ankur jain
sumber
23

Jika Anda bermigrasi dari konfigurasi berbasis XML ke berbasis Java dan Anda telah menghapus kebutuhan untuk web.xml dengan menerapkan WebApplicationInitializer, cukup hapus persyaratan untuk file web.xml yang akan hadir.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        ... 
    </configuration>
Beatty
sumber
jawaban serupa diberikan sebelumnya
Paul Verest
Ini memberikan konteks, di mana tepatnya garis harus pergi.
foo
20

Nilai tag webXml saya diperlukan agar terlihat seperti ini agar berfungsi:

<webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 
BoneGoat
sumber
persis! Tidak bisa mengetahuinya sampai saya melihat saya baru saja memotong pada awalnya <warSourceDirectory>\src\main\webapp</warSourceDirectory>tidak bekerja! Tidak dalam v2.6
Adam
19

Saya memiliki masalah yang sama persis dan saya menyelesaikannya seperti ini:

Buat folder baru dengan nama di WEB-INFbawah src/main/webbappitu

Klik kanan pada Anda Proyek -> Java EE Tools -> Generate Deployment Descriptor Desubtor

Ini seharusnya menghasilkan web.xml

Saya harap ini membantu dengan memecahkan masalah Anda: D

Catalin Ciolocoiu
sumber
13

Memang terlihat seperti Anda memiliki web.xml di lokasi yang tepat, tetapi meskipun demikian, kesalahan ini sering disebabkan oleh struktur direktori yang tidak sesuai dengan yang diharapkan oleh Maven. Misalnya, jika Anda memulai dengan webapp Eclipse yang ingin Anda bangun dengan Maven.

Jika itu adalah masalah, perbaikan cepat adalah untuk menciptakan
src/main/javadan
src/main/webappdirektori (dan direktori lain jika Anda membutuhkan mereka) dan hanya memindahkan file Anda.

Berikut ini adalah ikhtisar tata letak direktori maven: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

MattC
sumber
6

Jika Anda mengubah jalur proyek default, Anda harus menentukan lokasi file web.xml, misalnya:

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

Sesuai dokumentasi, dikatakan: Apakah gagal membangun atau tidak jika file web.xml hilang. Setel ke false jika Anda ingin WAR dibangun tanpa file web.xml. Ini mungkin berguna jika Anda membangun overlay yang tidak memiliki file web.xml. Nilai default adalah: true. Properti pengguna adalah: failOnMissingWebXml.

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

Semoga ini menjadi lebih jelas

codechefvaibhavkashyap
sumber
5

Ini juga berhasil untuk saya.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>WebContent\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>
Vineet kaushik
sumber
Ia bekerja, tapi log mengatakan sekarang: WEB-INF\web.xml already added, skipping. Itu aneh, ketika saya tidak menambahkan ini, saya mendapatkan kesalahan.
erwineberhard
Sama seperti erwineberhard. WEB-INF\web.xml already added, skipping
Prachi
4

mvn-war-plugin 2.3 memperbaiki ini:

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

Saya memiliki kesalahan yang sama pada server uji tetapi tidak di lokal. Setelah beberapa menit, saya menemukan bahwa IDE tidak disinkronkan dengan pom.xml. Inilah cara saya mengatasinya:

Menghasilkan kembali deskriptor penyebaran dengan Eclipse

  1. Klik kanan pada folder proyek Anda
  2. Di menu kontekstual, pilih "Java EE Tools" lalu "Generate Deployment Descriptor Desubtor Stub" Hasilkan web.xml
  3. Ini akan membuat web.xml. web.xml dalam struktur proyek

Hasilkan kembali deskriptor penyebaran dengan IntelliJ

  1. Klik kanan pada folder proyek Anda
  2. Di menu kontekstual, pilih "Buka Pengaturan Modul", lalu klik pada + untuk menambahkan deskriptor penyebaran web. Hasilkan deskriptor penyebaran
  3. Kemudian Anda dapat mengubah path ke deskriptor Anda atau Direktori Web Ressource dan di sisi kanan.
  4. Maka Anda akan mendapatkan sesuatu seperti: Struktur proyek
Pembuat Kunci00
sumber
1
dan di netbeans Anda akan: klik kanan node proyek> New> Other> Web> Standard Deployment Descriptor (web.xml).
lusuh
2

Pastikan pom.xml ditempatkan dengan benar di folder Project. dan tidak di dalam folder target atau di mana pun.

Sepertinya pom.xml relatif tidak selaras.

Meghashyam
sumber
2

Apakah struktur folder Anda diubah sehingga file tidak lagi di /src/main/webapp/WEB-INF/web.xml ?

Untuk mengatasi masalah ini, saya memberi folder web saya nama webapp dan meletakkannya di dalam src / main. Maven tampaknya mencari web.xml secara default di /src/main/webapp/WEB-INF/web.xml . Jika Anda melakukan ini, maka Anda tidak perlu memberi tahu secara eksplisit kepada maven di mana web.xml berada. Dan jika Anda telah mengubah struktur folder dan bangunan Anda baru-baru ini berhenti berfungsi, ini bisa menjadi alasannya.

Catatan: Ini adalah posting lama tetapi solusi yang diposting tidak menunjukkan mengapa build kerja tiba-tiba berhenti bekerja.

Usman Mutawakil
sumber
2

Ada banyak jawaban dan sebagian besar akan bekerja, tetapi saya akan menambahkan satu poin lagi, yang, saya pikir, tidak kalah pentingnya.
Menurut pesan log Anda, Anda menggunakan maven. Maven adalah alat membangun manajemen proyek yang didasarkan pada beberapa konvensi. Itu membangun proyek, membuat struktur direktori yang tepat dan menempatkan file ke direktori yang sesuai yang sesuai untuk Sun Microsystems Directory Structure Standardaplikasi Java EE / Web.

Anda dapat memasukkan banyak hal, termasuk plugin pakar, mengubah / mengkonfigurasi ulang direktori root proyek, dll., Tetapi ada satu langkah sederhana yang dapat Anda lakukan dan proyek Anda harus baik-baik saja. Cukup letakkan kaki Anda di web.xmlbawah src\main\webapp\WEB-INF\dan coba untuk membangun proyek denganmvn package .

Saya harap ini menambah sedikit lebih banyak cahaya untuk masalah ini.

Giorgi Tsiklauri
sumber
1

Kesalahan ini terjadi karena Anda memberi tahu Maven untuk mengirim file ke perang .

<packaging>war</packaging>

Apakah Anda benar-benar membutuhkan perang? Jika tidak, masukkan toples ke sana. Ini kode lengkapnya:

<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
sumber
guci dan perang adalah cerita yang sangat berbeda. Saya pikir perang diperlukan di sini, karena arsip semakin dikerahkan ke wadah web dan tidak dijalankan secara terpisah sebagai aplikasi jar mandiri.
Giorgi Tsiklauri
1

🔴 failOnMissingWebXml sejak 2020

Semua jawaban lain tentang mungkin usang karena nilai default yang digunakan oleh maven-war-plugin berubah :

Mulai dengan 3.1.0, properti ini default ke false jika proyek bergantung pada Servlet 3.0 API atau yang lebih baru.

Jadi HANYA yang harus Anda lakukan adalah menambahkan

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

Contoh:

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