ข้อผิดพลาด“ จำเป็นต้องมีแอตทริบิวต์ webxml” ใน Maven


318

ฉันได้รับข้อผิดพลาดต่อไปนี้:

เกิดข้อผิดพลาดในการประกอบ WAR: จำเป็นต้องมีแอตทริบิวต์ webxml (หรือ WEB-INF / web.xml ที่มีอยู่แล้วหากดำเนินการในโหมดอัพเดต)

ฉันได้มาweb.xmlถูกที่แล้วซึ่งก็คือprojectname\src\main\webapp\WEB-INF\web.xml

สิ่งใดที่ทำให้เกิดสิ่งนี้


1
บรรจุภัณฑ์ของคุณถูกกำหนดให้ทำสงครามในป้อมหรือไม่?
crowne

ฉันกำลังเผชิญกับปัญหาเดียวกันและอัปเดตปลั๊กอินเวอร์ชันแก้ไขได้
TechnocratSid

คำตอบ:


359

มันจะมีประโยชน์ถ้าคุณสามารถให้ข้อมูลโค้ดของ maven-war-plugin ของคุณ ดูเหมือนว่าweb.xmlจะอยู่ในสถานที่ที่เหมาะสม แต่คุณยังสามารถลองและให้ที่ตั้งได้อย่างชัดเจน

<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
ทำงานให้ฉันด้วยขอบคุณ แต่ตำแหน่งเริ่มต้นที่ Maven ค้นหาคืออะไร
บัฟฟาโล่

5
ฉันเพิ่งอัปเดตปลั๊กอินสงคราม maven จาก 2.1.1 เป็น 2.4 และความจำเป็นในการระบุตำแหน่งเริ่มต้นให้ชัดเจน
xverges

2
คุณอาจต้องการอัปเดตคำตอบของคุณสำหรับผู้ใช้ ItelliJ IDEA - IntelliJ สร้างโครงสร้างโครงการใหม่ดังนั้นจึงควรเป็น <webXml> web \ WEB-INF \ web.xml </webXml>
Vic Torious

ลองคำตอบของคุณแล้ว แต่ยังคงมีข้อผิดพลาดเดิมแทนที่จะเป็น "C: \ Users \ xxxx \ Videos \ maven-projects \ my-project \ src \ webapp \ WEB-INF" และทำงานได้ดี ฉันไม่รู้ว่าปัญหาคืออะไร โชคของฉัน ขอบคุณ
Bunny Joel

1
ใช้งานได้ดีมาก! ขอบคุณ :)
yanike

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

วิธีนี้ใช้ได้ผลสำหรับฉัน (ฉันเคยใช้ 2.2 มาก่อน) นอกจากนี้ฉันใช้ Java Based Configuration สำหรับ Servlet 3.0 และไม่จำเป็นต้องมีไฟล์ web.xml


รุ่น 3.x ว่าในขณะนี้มีปลั๊กอิน failOnMissingWebXml falseเริ่มต้น ดังนั้น <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> ควรพอเพียง
Eisenknurr

ทำงานให้ฉันเหมือนฉันและยังคงใช้ jboss-web.xml - ขอบคุณ!
JGlass

ฉันมีโครงการที่ไม่มี web.xml และสิ่งนี้ใช้ได้สำหรับฉัน Maven build สำเร็จแล้ว
blueSky

81

มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉันเช่นกัน

<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
ด้านบนใช้งานได้เมื่อเปิดใช้งาน facets และ WebContent เป็นโฟลเดอร์ที่ web.xml เข้าไป
Ram

32

นี่เป็นเพราะคุณไม่ได้รวม web.xml ในโครงการเว็บของคุณและพยายามสร้างสงครามโดยใช้ maven เมื่อต้องการแก้ไขข้อผิดพลาดนี้คุณจะต้องตั้งค่าfailOnMissingWebXmlการเท็จในแฟ้ม pom.xml

ตัวอย่างเช่น:

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

โปรดดูบล็อกสำหรับรายละเอียดเพิ่มเติม: https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html


23

หากคุณกำลังโอนย้ายจากการกำหนดค่าตาม XML เป็น Java และคุณได้ลบความต้องการ web.xml โดยใช้ WebApplicationInitializer เพียงลบข้อกำหนดสำหรับไฟล์ web.xml ที่จะนำเสนอ

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

คำตอบที่คล้ายกันได้รับมาก่อน
พอลเวสต์

อันนี้ให้บริบทที่เส้นต้องไป
foo

20

ค่าของแท็ก webXml ของฉันต้องมีลักษณะเช่นนี้เพื่อที่จะทำงาน:

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

ตรง! ไม่สามารถคิดออกได้จนกว่าฉันจะเห็นว่าฉันมีเครื่องหมายทับที่จุดเริ่มต้น<warSourceDirectory>\src\main\webapp</warSourceDirectory>ไม่ทำงาน! ไม่อยู่ใน v2.6
อดัม

19

ฉันมีปัญหาเดียวกันแน่นอนและฉันแก้ไขมันเช่นนี้:

สร้างโฟลเดอร์ใหม่ชื่อWEB-INFภายใต้src/main/webbappแล้ว

คลิกขวาที่โครงการของคุณ-> เครื่องมือ Java EE -> สร้าง Stub Descriptor การปรับใช้

สิ่งนี้ควรสร้างของคุณ web.xml

ฉันหวังว่านี่จะช่วยได้โดยการแก้ปัญหาของคุณ: D


13

ดูเหมือนว่าคุณมี web.xml ในตำแหน่งที่ถูกต้อง แต่ถึงกระนั้นข้อผิดพลาดนี้มักเกิดจากโครงสร้างไดเรกทอรีที่ไม่ตรงกับสิ่งที่ Maven คาดหวังให้เห็น ตัวอย่างเช่นถ้าคุณเริ่มต้นด้วย Eclipse webapp ที่คุณพยายามสร้างด้วย Maven

หากนั่นคือปัญหาการแก้ไขด่วนคือการสร้าง
src/main/javaและ
src/main/webappไดเรกทอรี (และไดเรกทอรีอื่น ๆ หากคุณต้องการ) และเพียงแค่ย้ายไฟล์ของคุณ

นี่คือภาพรวมของรูปแบบไดเรกทอรี maven: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html


6

หากคุณเปลี่ยนพา ธ โปรเจ็กต์ดีฟอลต์คุณต้องระบุตำแหน่งของไฟล์ web.xml ตัวอย่างเช่น:

        <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

ตามเอกสารอธิบายว่า: ไม่ว่าจะสร้างล้มเหลวหรือไม่หากไฟล์ web.xml หายไป ตั้งค่าเป็นเท็จหากคุณต้องการให้คุณสร้าง WAR โดยไม่มีไฟล์ web.xml สิ่งนี้อาจมีประโยชน์หากคุณสร้างภาพซ้อนทับที่ไม่มีไฟล์ web.xml ค่าเริ่มต้นคือ: จริง คุณสมบัติผู้ใช้คือ: failOnMissingWebXml

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

หวังว่าจะทำให้ชัดเจนยิ่งขึ้น


5

มันก็ใช้ได้ผลเช่นกันสำหรับฉัน

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

มันทำงานได้ WEB-INF\web.xml already added, skippingแต่บันทึกกล่าวว่าขณะนี้: มันแปลกเมื่อฉันไม่เพิ่มสิ่งนี้ฉันได้รับข้อผิดพลาด
erwineberhard

เช่นเดียวกับ erwineberhard WEB-INF\web.xml already added, skipping
Prachi

4

mvn-war-plugin 2.3 แก้ไขสิ่งนี้:

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

4

ฉันมีข้อผิดพลาดเดียวกันบนเซิร์ฟเวอร์ทดสอบ แต่ไม่ใช่ในท้องถิ่น หลังจากนั้นไม่กี่นาทีฉันค้นพบว่า IDE ไม่ได้ซิงโครไนซ์กับ pom.xml นี่คือวิธีที่ฉันแก้มัน:

สร้างตัวให้คำอธิบายถึงการนำไปใช้งานอีกครั้งด้วย Eclipse

  1. คลิกขวาที่โฟลเดอร์โครงการของคุณ
  2. ในเมนูบริบทเลือก "Java EE Tools" จากนั้นเลือก "สร้างตัวอธิบายการปรับใช้ Stub" สร้าง web.xml
  3. มันจะสร้าง web.xml web.xml ในโครงสร้างโครงการ

สร้างตัวให้คำอธิบายการปรับใช้อีกครั้งด้วย IntelliJ

  1. คลิกขวาที่โฟลเดอร์โครงการของคุณ
  2. ในเมนูบริบทเลือก "เปิดการตั้งค่าโมดูล" จากนั้นคลิกที่ + เพื่อเพิ่มตัวให้คำอธิบายถึงการปรับใช้เว็บ สร้างตัวให้คำอธิบายถึงการนำไปใช้งาน
  3. จากนั้นคุณสามารถเปลี่ยนเส้นทางไปยัง descriptorหรือWeb Ressource Directoriesและทางด้านขวา
  4. จากนั้นคุณจะได้รับสิ่งที่ชอบ: โครงสร้างโครงการ

1
และในเน็ตคุณจะต้อง: คลิกขวาที่โหนดโครงการ> ใหม่> อื่น ๆ > เว็บ> ตัวอธิบายการปรับใช้มาตรฐาน (web.xml)
โทรม

2

ตรวจสอบให้แน่ใจว่าวาง pom.xml ไว้ในโฟลเดอร์ Project อย่างถูกต้อง และไม่อยู่ในโฟลเดอร์เป้าหมายหรือสิ่งอื่นใด

ดูเหมือนว่า pom.xml จะไม่จัดแนวค่อนข้าง


2

ถูกโครงสร้างโฟลเดอร์ของคุณมีการเปลี่ยนแปลงเพื่อให้ไฟล์จะไม่มีอีกต่อไปที่/src/main/webapp/WEB-INF/web.xml ?

ในการแก้ไขปัญหานี้ฉันได้ตั้งชื่อเว็บแอพให้กับเว็บโฟลเดอร์และวางไว้ใน src / main Maven ดูเหมือนจะมองหา web.xml โดยเริ่มต้นที่/src/main/webapp/WEB-INF/web.xml หากคุณทำสิ่งนี้คุณไม่จำเป็นต้องบอก maven อย่างชัดเจนว่า web.xml อยู่ที่ไหน และถ้าคุณได้เปลี่ยนแปลงโครงสร้างโฟลเดอร์และงานสร้างของคุณเมื่อไม่นานมานี้อาจเป็นสาเหตุ

หมายเหตุ:นี่เป็นโพสต์เก่า แต่โซลูชันที่โพสต์ไม่ได้ชี้ให้เห็นว่าทำไมบิลด์ทำงานจึงหยุดทำงาน


2

มีคำตอบมากมายและส่วนใหญ่จะใช้งานได้ แต่ฉันจะเพิ่มอีกหนึ่งจุดซึ่งฉันคิดว่าไม่มีความสำคัญน้อยกว่า
ตามข้อความบันทึกของคุณคุณกำลังใช้mavenตามข้อความบันทึกของคุณว่าคุณกำลังใช้Maven เป็นเครื่องมือสร้างการจัดการโครงการซึ่งขึ้นอยู่กับอนุสัญญาบางอย่าง สร้างโปรเจ็กต์สร้างโครงสร้างไดเร็กทอรีที่เหมาะสมและวางไฟล์ลงในไดเร็กทอรีที่สอดคล้องซึ่งสอดคล้องกับSun Microsystems Directory Structure Standardสำหรับ Java EE / เว็บแอ็พพลิเคชัน

คุณอาจรวมหลายสิ่งรวมถึงปลั๊กอิน maven การเปลี่ยน / กำหนดค่าไดเรกทอรีรากของโครงการ ฯลฯ แต่มีขั้นตอนง่าย ๆ เพียงขั้นตอนเดียวที่คุณสามารถทำได้และโครงการของคุณควรจะใช้ได้ เพียงวางของคุณweb.xmlภายใต้src\main\webapp\WEB-INF\mvn packageและพยายามที่จะสร้างโครงการที่มี

ฉันหวังว่านี่จะเพิ่มแสงให้กับปัญหานี้อีกเล็กน้อย


1

ข้อผิดพลาดนี้เกิดขึ้นเพราะคุณบอก Maven ไปยังไฟล์ pakage การสงคราม

<packaging>war</packaging>

คุณต้องการทำสงครามจริงๆเหรอ? ถ้าไม่ใส่ขวด นี่คือรหัสเต็ม:

<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 และสงครามเป็นเรื่องราวที่แตกต่างอย่างสิ้นเชิง ฉันคิดว่าสงครามเป็นสิ่งจำเป็นที่นี่เนื่องจากไฟล์เก็บถาวรกำลังถูกปรับใช้กับเว็บคอนเทนเนอร์และไม่ได้ทำงานแยกต่างหากเป็นแอปพลิเคชันแบบสแตนด์อโลน
Giorgi Tsiklauri

1

🔴 failOnMissingWebXml ตั้งแต่ปี 2020

คำตอบอื่น ๆ ทั้งหมดเกี่ยวกับอาจล้าสมัยเพราะค่าเริ่มต้นที่ใช้โดย maven-war-plugin เปลี่ยนแปลง :

เริ่มต้นด้วย 3.1.0 คุณสมบัตินี้มีค่าเริ่มต้นเป็นเท็จหากโครงการขึ้นอยู่กับ Servlet 3.0 API หรือใหม่กว่า

ดังนั้นสิ่งเดียวที่คุณต้องทำคือการเพิ่ม

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

ตัวอย่าง:

<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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.