web.xml หายไปและ <failOnMissingWebXml> ถูกตั้งค่าเป็นจริง


142

พิจารณา:

ป้อนคำอธิบายภาพที่นี่

เมื่อฉันสร้างโครงการMavenอย่างง่ายในEclipseฉันได้รับข้อผิดพลาดนี้:

web.xml หายไปและ<failOnMissingWebXml>ตั้งค่าเป็นจริง

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


5
maven-war-pluginคุณจำเป็นต้องเพิ่ม นี่เป็นปลั๊กอินโดยนัยซึ่งค่าเริ่มต้นสำหรับคุณสมบัติการกำหนดค่านั้นเป็นจริง คุณต้องประกาศอย่างชัดเจนและตั้งค่าคุณสมบัติการกำหนดค่าเป็นเท็จ ดูเพิ่มเติมได้ที่นี่ หรือคุณสามารถเพิ่ม web.xml ที่ว่างเปล่าได้
— Paul Samsotha

คำตอบ:


181

คุณสามารถทำได้เช่นนี้:

  1. คลิกขวาที่การปรับใช้อธิบาย ใน Explorer โครงการ
  2. เลือกสร้างการปรับใช้อธิบายกุด

มันจะสร้างโฟลเดอร์WEB-INFในsrc / main / webappและweb.xmlในนั้น

ป้อนคำอธิบายรูปภาพที่นี่


39
ฉันจะไม่แนะนำให้เพิ่ม boilerplate ในรหัสเพียงเพราะเครื่องมือสร้างของคุณมีข้อผิดพลาด
— Martijn Burger

1
@MartijnBurger คุณช่วยสอนเราเกี่ยวกับผลกระทบที่อาจเกิดขึ้นจากการแฮ็คข้างต้นและถ้าเป็นไปได้ก็เพิ่มทางเลือกอื่น ๆ ด้วยหรือ - จะช่วยโปรแกรมเมอร์มือใหม่อย่างฉัน ขอบคุณ
— Sendhilkumar Alalasundaram

7
ดูคำตอบของฉันด้านล่างสำหรับทางเลือก วิธีการแก้ปัญหาข้างต้นนั้นไม่ผิดเพียงคุณควรพยายามทำให้ผลิตภัณฑ์ขั้นสุดท้ายของคุณสะอาดเท่าที่จะทำได้ ด้วยโซลูชันด้านบนผลิตภัณฑ์ขั้นสุดท้ายของคุณจะจบลงด้วยweb.xml ไฟล์ที่ไม่จำเป็น คุณควรแก้ไขปัญหานี้ในเครื่องมือสร้าง (เช่น maven) แทน
— Martijn Burger

คุณอาจหมายถึง: eggsylife.co.uk/2009/12/20/…
— Satyendra

นี้จะเพิ่มไฟล์ที่ไม่จำเป็นในโครงการของคุณและสิ่งอื่น ๆ คือ web.xml approcah เก่า ถ้าคุณต้องการที่จะลบข้อผิดพลาดนี้แล้วเพียงแค่บังคับให้อัปเดตข้อผิดพลาด maven จะหายไป
— jitendra varshney

393

นี่เป็นข้อผิดพลาด maven มันบอกว่ามันเป็นที่คาดหวังว่าไฟล์ web.xml <packaging>war</packaging>ในโครงการของคุณเพราะมันเป็นโปรแกรมเว็บตามที่ระบุโดย อย่างไรก็ตามสำหรับเว็บแอปพลิเคชันเมื่อเร็ว ๆ นี้ไฟล์ web.xml เป็นทางเลือกโดยสิ้นเชิง Maven ต้องติดตามข้อตกลงนี้ เพิ่มสิ่งนี้ลงใน Maven ของคุณpom.xmlเพื่อให้ Maven ตามทันและคุณไม่จำเป็นต้องเพิ่มสิ่งที่ไร้ประโยชน์web.xmlให้กับโครงการของคุณ:

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

นี่เป็นทางออกที่ดีกว่าการเพิ่มที่ว่างเปล่าweb.xmlเพราะวิธีนี้ผลิตภัณฑ์ขั้นสุดท้ายของคุณยังคงสะอาดอยู่คุณเพียงแค่เปลี่ยนพารามิเตอร์การสร้างของคุณ

สำหรับ maven เวอร์ชันปัจจุบันเพิ่มเติมคุณสามารถใช้เวอร์ชันที่สั้นกว่า:

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

28
คำตอบนี้มีเหตุผลมากกว่าคำตอบอื่น ๆ
— smwikipedia

7
หากคุณกำลังใช้งานในสภาพแวดล้อมของ Servlet 3.0+ และมีการนำInterface WebApplicationInitializerคำตอบนี้ไปใช้เป็นแนวทางที่ถูกต้อง มันเป็นวิธีที่สมเหตุสมผลในการแก้ปัญหานี้ - ไม่มีจุดเพิ่มweb.xmlหลังจากทำตามขั้นตอนเพื่อมีชีวิตอยู่โดยปราศจากมัน!
— Geeb

4
นี่เป็นคำตอบที่ดีกว่าการสร้าง web.xml ที่ว่างเปล่า
— dtortola

1
ทำงานได้แม้ไม่มี Maven> Update Project ดังนั้นจึงไม่จำเป็น
— โชคดี

13
โปรดพิจารณาปรับปรุงคำตอบของคุณสำหรับการกำหนดค่าสั้นตามข้อเสนอแนะดังต่อไปนี้ การรวม<properties><failOnMissingWebXml>false</failOnMissingWebXml></properties>พอเพียงแทนการตั้งค่าการกำหนดค่าปลั๊กอินเพิ่มเติมอย่างละเอียด
— Olivier Cailloux

32

หากคุณมี web.xml อยู่แล้วภายใต้ / src / main / webapp / WEB-INF แต่คุณยังได้รับข้อผิดพลาด "web.xml หายไปและตั้งค่าเป็นจริง" คุณสามารถตรวจสอบว่าคุณรวม/ src / main / webappใน แหล่งที่มาของโครงการของคุณ

นี่คือขั้นตอนที่คุณสามารถทำตาม:

  1. คุณสามารถตรวจสอบสิ่งนี้ได้โดยคลิกขวาที่โครงการของคุณและเปิดกล่องโต้ตอบคุณสมบัติจากนั้นเลือก "Deployment Assembly" ซึ่งคุณสามารถเพิ่มโฟลเดอร์ / src / main / webapp บันทึกการตั้งค่าแล้ว
  2. ไปที่เมนูโครงการ Eclipse -> ล้าง ... และล้างโครงการและข้อผิดพลาดควรหายไป

(ฉันตรวจสอบสิ่งนี้ด้วย Eclipse Mars)


ประสบการณ์ในเรื่องเดียวกันภายใต้ "Eclipse Mars" และโซลูชันที่อธิบายไว้ของคุณนั้นสมบูรณ์แบบ! ขอบคุณ
— Hartmut P.

ไม่ได้ผลสำหรับฉัน ... ฉันมีโฟลเดอร์เหล่านั้นอยู่แล้วและฉันได้ลองตั้งค่า web.xml ด้วยความผิดพลาด มันไม่ทำงาน ....
— Baradwaj Aryasomayajula

19

หากคุณใช้ Spring Tool Suite ตัวเลือกสำหรับการสร้าง Deployment Descriptor Stub จะถูกย้ายภายใต้ Java EE Tools ดังนั้นคุณ:

  1. คลิกขวาที่โครงการของคุณ
  2. เลือกเครื่องมือ Java EE
  3. เลือกตัวเลือกสร้าง Depubment Descriptor Stub

สิ่งนี้จะสร้างไฟล์ web.xml ภายในโฟลเดอร์ src / main / webapp / WEB-INF / และลบข้อผิดพลาดออกจากไฟล์ pom.xml ของ Maven

ป้อนคำอธิบายรูปภาพที่นี่


16

ผมมีปัญหาเดียวกัน. หลังจากเรียนและ googling ฉันได้แก้ไขปัญหาของฉันแล้ว:

คลิกขวาที่โฟลเดอร์โครงการไปที่เลือกJava EE Tools Generate Deployment Descriptor Stubนี้จะสร้างในโฟลเดอร์web.xmlsrc/main/webapp/WEB-INF


3
ฉันจะไม่แนะนำให้เพิ่ม boilerplate ในรหัสเพียงเพราะเครื่องมือสร้างของคุณมีข้อผิดพลาด
— Martijn Burger

16

นอกจากนี้คุณยังสามารถทำสิ่งนี้ซึ่งน้อย verbose

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

ทางออกที่ดีที่สุด IMHO ดูdoc (และข้อผิดพลาด eclipse เก่าซึ่งทำให้การแก้ปัญหานี้ไม่ได้ผลตอนนี้แก้ไขแล้ว)
— Olivier Cailloux

9

Eclipse รู้จักwebappไดเรกทอรีเริ่มต้นที่ไม่ถูกต้อง maven-war-pluginดังนั้นเราจึงควรกำหนดอย่างชัดเจนได้โดย

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>3.0.0</version>
      <configuration>
        <webappDirectory>src/main/webapp</webappDirectory>
      </configuration>
    </plugin>
  </plugins>
</build>

เมื่อบันทึกการตั้งค่านี้ข้อผิดพลาดจะไม่เกิดขึ้นหากลบออก (ฉันไม่สามารถอธิบายได้ว่าทำไม)


3

ฉันมีปัญหาเดียวกันแม้ว่าฉันมีโฟลเดอร์ที่ถูกต้อง'src/main/webapp/WEB-INF/'web.xml

ปัญหาหายไปหลังจากฉันสร้างการกำหนดค่า (maven-> eclipse) อีกครั้งด้วย Maven build..การดำเนินการmvn eclipse:clean eclipse:eclipse

จากนั้นฉันก็ใช้Maven -> Update Projectตัวเลือกเฉพาะปลั๊กอิน (eclipse-> maven)


เหมือนกันที่นี่แม้ว่าฉันจะใช้การตั้งค่า git
— ฮาร์ดเฮด

ขอบคุณสิ่งนี้ช่วยฉันด้วย คลิกขวา -> Maven -> อัปเดตโครงการ
— trebor

2

ฉันพบปัญหานี้ใน eclipse เท่านั้นทุกอย่างทำงานได้ดีในบรรทัดคำสั่ง Maven และไฟล์ web.xml ของฉันมีอยู่ มันเป็นโครงการที่ครบกำหนดแล้ว (ถูกปรับใช้แล้วในการผลิต) ที่ได้รับผลกระทบ ปัญหาของฉันเชื่อมโยงกับข้อมูลเมตาของ eclipse มีปัญหากับหนึ่งในไฟล์ใน. setset / folder ของฉันโดยเฉพาะ org.eclipse.wst.common.component มีการเปลี่ยนแปลง ฉันสามารถกู้คืนไฟล์นี้เป็นเวอร์ชันก่อนหน้าซึ่งแก้ไขปัญหาในกรณีของฉัน

โปรดทราบว่าคำตอบของ Yuci ไม่ได้ผลสำหรับฉันเมื่อฉันพยายามคลิกที่ Deployment Assembly ในคุณสมบัติ eclipse ฉันพบข้อผิดพลาดว่า "หน้าแสดงในปัจจุบันมีค่าที่ไม่ถูกต้อง"


ฉันมีสถานการณ์เดียวกันและต้องกู้คืนไฟล์ org.eclipse.wst.common.component จาก. setset / folder ของฉันและโครงการของฉันใช้งานได้ในตอนนี้เห็นได้ชัดว่าเนื้อหาขององค์ประกอบถูกลบดังนั้นจึงไม่มีเส้นทางไปยังเว็บของฉัน ไฟล์ xml อีกทั้งเมื่อฉันพยายามเปิด Deployment Assembly ในคุณสมบัติ eclipse ก็มีข้อผิดพลาดเดียวกัน: "หน้าที่แสดงอยู่ในปัจจุบันมีค่าที่ไม่ถูกต้อง" ฉันพบคำตอบนี้ช้าไปหน่อย แต่นี่เป็นวิธีที่ฉันจะแก้มัน btw คำตอบที่ดี
— Jorge Valdés

2

สำหรับโครงการที่มี web.xml แสดง โครงการ -> คุณสมบัติ -> ชุดการปรับใช้ซึ่งคุณสามารถเพิ่มโฟลเดอร์ src / main / webapp บันทึกการเปลี่ยนแปลง. ทำความสะอาดโครงการเพื่อไปต่อ

สำหรับโปรเจ็กต์ที่มี web.xml ไม่แสดง ตั้งค่า failOnMissingWebXml เป็น false ใน pom.xml ภายใต้แท็กคุณสมบัติ


1

ทำเช่นนี้:

ไปและคลิกขวาที่ตัวให้คำอธิบายการปรับใช้และคลิกสร้างตัวอธิบายการปรับใช้


0

มันไม่สมเหตุสมผลเลยที่จะสร้าง web.xml เพียงแค่ต้องการ elcipse แม้ว่ามันจะไม่จำเป็นก็ตาม นี่เป็นกรณีถ้าคุณมี conatiner ของ servlet ฝังอยู่หรือไม่ใช้ xml cfg เหมือน spring-boot คุณเพียงปรับใช้ JavaEE (สิ่งที่ไร้ประโยชน์) ใน eclipse ในระดับโครงการหรือทั่วโลก

Eclipse/STS>Windows>Preferences>JavaEE>Doclet>Webdoclet> "uncheck" DeploymentDescriptor > OK


0

ขั้นตอนของ: เลือกโครงการของคุณและเลือกตัวเลือก "ตัวให้คำอธิบายการปรับใช้" จากนั้นเลือก "สร้างส่วนการอธิบายการปรับใช้" ทำงานได้ดี ปัญหาคือมันไม่ได้เป็นกรณีที่เราต้องการ web.xml ดังนั้นจึงเป็นการดีที่สุดที่จะผนวกเท็จกับ pom.xml


0

คลิกขวาที่ project --> New --> Other --> Standard Deployment Descriptor(web.xml)

1

จากนั้นกดถัดไปมันจะสร้างWEB-INFโฟลเดอร์พร้อมweb.xmlไฟล์ภายใน

2

แค่นั้นแหละ




-1

คลิกขวาที่โครงการไปMaven -> โครงการปรับปรุง ...แล้วตรวจสอบกองทัพปรับปรุงภาพนิ่ง / ข่าวจากนั้นคลิกตกลง มันจบแล้ว!

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