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?


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>

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.


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>

4
Di atas berfungsi ketika aspek diaktifkan dan WebContent adalah folder tempat web.xml masuk
Ram


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>

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> 

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


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


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>

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


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>

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

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

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.


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.


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.


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>

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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.