मावेन में "webxml विशेषता की आवश्यकता है" त्रुटि


318

मुझे निम्नलिखित त्रुटि प्राप्त हो रही है:

WAR को असेम्बल करने में त्रुटि: webxml विशेषता आवश्यक है (या अपडेट में निष्पादित होने पर WEB-INF / web.xml पहले से मौजूद है)

मुझे web.xmlसही जगह मिली है जो हैprojectname\src\main\webapp\WEB-INF\web.xml

ऐसा किसके कारण हो सकता है?


1
क्या आपकी पैकेजिंग पोम में युद्ध के लिए सेट है?
मुकुट

मैं एक ही मुद्दे का सामना कर रहा था और प्लगइन संस्करण को अपडेट करके इसे हल किया।
टेक्नोक्रेटसिड

जवाबों:


359

यदि आप अपने मावेन-युद्ध-प्लगइन का एक कोड स्निपेट प्रदान कर सकते हैं तो यह उपयोगी होगा। ऐसा लगता है कि 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
मेरे लिए भी काम किया, धन्यवाद। लेकिन मावेन की खोज के लिए डिफ़ॉल्ट स्थान क्या है?
भैंस

5
मैंने सिर्फ 2.1.1 से 2.4 तक मावेन युद्ध प्लगइन को अपडेट किया, और डिफ़ॉल्ट स्थान को स्पष्ट करने की आवश्यकता है।
xverges

2
आप ItelliJ IDEA उपयोगकर्ताओं के लिए अपने उत्तर को अपडेट करना चाह सकते हैं - IntelliJ एक अन्य प्रोजेक्ट संरचना बनाता है इसलिए यह <webXml> web \ WEB-INF \ web.xml </ webXml>
विक टोरियस

आपके उत्तर की कोशिश की, लेकिन फिर भी उसी त्रुटि के बजाय मुझे यह "C: \ Users \ xxxx \ Videos \ maven-Projects \ my-project \ src \ webapp \ WEB-INF" मिला और अच्छा काम किया। मुझे नहीं पता कि क्या समस्या है। यह मेरी किस्मत है। धन्यवाद
बनी योएल

1
बढ़िया काम किया! Thx :)
yanike

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

यह समाधान मेरे लिए काम करता है (मैं पहले 2.2 का उपयोग कर रहा था)। इसके अलावा, मैं सर्वलेट 3.0 के लिए जावा आधारित कॉन्फ़िगरेशन का उपयोग कर रहा हूं और इसके लिए web.xml फ़ाइल की आवश्यकता नहीं है।


उस प्लगइन के संस्करण 3.x में अब विफलOnMissingWebXml डिफ़ॉल्ट है false। तो, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> पर्याप्त होना चाहिए।
Eisenknurr

मेरे लिए काम किया जैसा मैं था और अभी भी jboss-web.xml का उपयोग कर रहा हूँ - धन्यवाद!
JGlass

मेरे पास एक प्रोजेक्ट है जिसमें web.xml नहीं है, और यह मेरे लिए काम करता है। मावेन बिल्ड सफल है।
ब्लूस्की

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
ऊपर काम करता है जब पहलू सक्षम होते हैं और WebContent वह फ़ोल्डर होता है जहाँ web.xml जाता है।
Ram

32

ऐसा इसलिए है क्योंकि आपने अपने वेब प्रोजेक्ट में web.xml को शामिल नहीं किया है और मावेन का उपयोग करके युद्ध का निर्माण करने की कोशिश कर रहे हैं। इस त्रुटि को हल करने के लिए आप स्थापित करने की आवश्यकता failOnMissingWebXml को झूठा pom.xml फ़ाइल में।

उदाहरण के लिए:

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

कृपया अधिक जानकारी के लिए ब्लॉग देखें: https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html


23

यदि आप XML- आधारित जावा-आधारित कॉन्फ़िगरेशन से माइग्रेट कर रहे हैं और आपने WebApplicationInitializer लागू करके web.xml की आवश्यकता को हटा दिया है, तो मौजूद होने के लिए 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>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 

बिल्कुल सही! यह पता नहीं लगा सकता जब तक मैंने देखा कि मैं शुरुआत में सिर्फ एक स्लैश था <warSourceDirectory>\src\main\webapp</warSourceDirectory>काम नहीं करता है! V2.6 में नहीं
एडम

19

मुझे ठीक वैसी ही समस्या थी और मैंने इसे इस तरह हल किया:

नामक एक नया फ़ोल्डर बनाएँ WEB-INFके तहत src/main/webbappतो

अपने प्रोजेक्ट पर राइट क्लिक करें -> जावा ईई टूल्स -> परिनियोजन डेस्क्रिप्टर स्टब उत्पन्न करें

यह आपके उत्पन्न करना चाहिए web.xml

मुझे आशा है कि यह आपकी समस्या को हल करने में मदद करता है: डी


13

ऐसा लगता है कि आपके पास सही स्थान पर web.xml है, लेकिन फिर भी, यह त्रुटि अक्सर निर्देशिका संरचना के कारण होती है जो मेलन को देखने की अपेक्षा नहीं करती है। उदाहरण के लिए, यदि आप एक ग्रहण वेबप से शुरू करते हैं जिसे आप मावेन के साथ बनाने की कोशिश कर रहे हैं।

यदि वह समस्या है, तो एक त्वरित समाधान
src/main/javaएक
src/main/webappनिर्देशिका और एक निर्देशिका (और अन्य निर्देशिकाओं को बनाने के लिए है अगर आपको उनकी आवश्यकता है) और बस अपनी फ़ाइलों को स्थानांतरित करें।

यहाँ मावेन डायरेक्टरी लेआउट का अवलोकन दिया गया है: 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

प्रलेखन के अनुसार, यह कहता है: यदि वेब.xml फ़ाइल अनुपलब्ध है तो बिल्ड को विफल करना है या नहीं। यदि आप चाहते हैं कि आप वेब.xml फ़ाइल के बिना निर्मित WAR चाहते हैं तो गलत पर सेट करें। यह उपयोगी हो सकता है यदि आप एक ओवरले का निर्माण कर रहे हैं जिसमें कोई 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 के रूप में भी। WEB-INF\web.xml already added, skipping
प्राची

4

mvan-war-plugin 2.3 इसे ठीक करता है:

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

4

मुझे परीक्षण सर्वर पर समान त्रुटि मिली है, लेकिन स्थानीय में नहीं। कुछ मिनटों के बाद, मुझे पता चला कि आईडीई pom.xml के साथ सिंक्रनाइज़ नहीं था। यहां बताया गया है कि मैं इसे कैसे हल करता हूं:

ग्रहण के साथ परिनियोजन वर्णनकर्ता को पुन: जनरेट करें

  1. अपने प्रोजेक्ट फ़ोल्डर पर राइट क्लिक करें
  2. संदर्भ मेनू में, "जावा ईई टूल्स" चुनें फिर "तैनाती डेसक्रिप्टर स्टब उत्पन्न करें" Web.xml उत्पन्न करें
  3. यह web.xml बनाएगा। web.xml परियोजना संरचना में

IntelliJ के साथ परिनियोजन विवरणक पुन: जनरेट करें

  1. अपने प्रोजेक्ट फ़ोल्डर पर राइट क्लिक करें
  2. संदर्भ मेनू में, "मॉड्यूल सेटिंग खोलें" चुनें, फिर वेब परिनियोजन विवरण जोड़ने के लिए + पर क्लिक करें। परिनियोजन वर्णनकर्ता उत्पन्न करें
  3. तब आपका अपने डिस्क्रिप्टर या वेब रिसोर्स डायरेक्टर्स और दाईं ओर का रास्ता बदल सकता है ।
  4. तब आपको कुछ ऐसा मिलेगा: परियोजना की संरचना

1
और netbeans में: आप प्रोजेक्ट नोड> नया> अन्य> वेब> मानक परिनियोजन डिस्क्रिप्टर (web.xml) पर राइट क्लिक करें।
जर्जर

2

सुनिश्चित करें कि pom.xml प्रोजेक्ट फ़ोल्डर में ठीक से रखा गया है। और लक्ष्य फ़ोल्डर या किसी अन्य स्थान के अंदर नहीं।

ऐसा लगता है कि pom.xml अपेक्षाकृत संरेखित नहीं है।


2

क्या आपकी फ़ोल्डर संरचना बदल गई थी इसलिए फ़ाइल अब /src/main/webapp/WEB-INF/web.xml पर नहीं है ?

इस समस्या को हल करने के लिए, मैंने अपने वेब फ़ोल्डर को webapp नाम दिया और इसे src / main के अंदर रखा। Maven /src/main/webapp/WEB-INF/web.xml पर डिफ़ॉल्ट रूप से web.xml देखने लगता है । यदि आप ऐसा करते हैं, तो आपको स्पष्ट रूप से मावेन को बताने की आवश्यकता नहीं है कि web.xml कहां है। और अगर आपने अपने फ़ोल्डर की संरचना को बदल दिया है और आपके बिल्ड ने हाल ही में काम करना बंद कर दिया है, तो यह हो सकता है।

नोट: यह एक पुरानी पोस्ट है लेकिन पोस्ट किए गए समाधान इस बात की ओर इशारा नहीं करते हैं कि एक काम करने वाला निर्माण अचानक काम करना क्यों बंद कर देगा।


2

कई उत्तर हैं और उनमें से अधिकांश काम करेंगे, लेकिन मैं एक और बिंदु जोड़ूंगा, जो, मुझे लगता है, इसका कोई कम महत्व नहीं है।
आपके लॉग संदेश के अनुसार, आप उपयोग कर रहे हैं maven। मावेन एक परियोजना प्रबंधन-निर्माण उपकरण है जो कुछ सम्मेलनों पर आधारित है। यह परियोजना का निर्माण करता है, उचित निर्देशिका संरचना बनाता है और फाइलों को संबंधित निर्देशिकाओं में रखता है जो Sun Microsystems Directory Structure Standardजावा ईई / वेब अनुप्रयोगों के लिए आज्ञाकारी है ।

आप कई चीजें शामिल कर सकते हैं, जिसमें मावेन प्लगइन्स, प्रोजेक्ट रूट डायरेक्टरी को बदलना / पुन: कॉन्फ़िगर करना आदि शामिल हैं, लेकिन एक सरल कदम है जिसे आप कर सकते हैं और आपकी परियोजना ठीक होनी चाहिए। बस अपने web.xmlअंडर रखें src\main\webapp\WEB-INF\और प्रोजेक्ट को बनाने की कोशिश करें mvn package

मुझे उम्मीद है कि यह इस समस्या के लिए थोड़ा और प्रकाश जोड़ता है।


1

यह त्रुटि तब होती है क्योंकि आप मावेन को युद्ध के लिए फ़ाइलों को पक्के करने के लिए कहते हैं ।

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

जार और युद्ध पूरी तरह से अलग कहानियां हैं। मुझे लगता है कि यहां युद्ध की आवश्यकता है, क्योंकि संग्रह को वेब कंटेनर में तैनात किया जा रहा है और इसे स्टैंडअलोन जार एप्लिकेशन के रूप में अलग से नहीं चलाया जा रहा है।
जियोर्गी सिकलौरी

1

2020 से 2020 failOnMissingWebXml

के बारे में अन्य सभी उत्तर अप्रचलित हो सकते हैं क्योंकि मावेन-वार-प्लगइन द्वारा उपयोग किए गए डिफ़ॉल्ट मान बदल गए हैं :

3.1.0 से शुरू होने पर, यह प्रॉपर्टी झूठी पर डिफॉल्ट करती है यदि प्रोजेक्ट सर्वलेट 3.0 एपीआई या नए पर निर्भर करता है।

तो केवल आपको जो करना है वह जोड़ना है

<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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.