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.