Maven'de “webxml özelliği gerekli” hatası


318

Aşağıdaki hatayı alıyorum:

WAR derleme hatası: webxml özelliği gerekiyor (veya güncelleme modunda yürütüldüğünde önceden var olan WEB-INF / web.xml)

web.xmlDoğru yere girdim kiprojectname\src\main\webapp\WEB-INF\web.xml

Buna ne sebep olabilir?


1
ambalajınız pom'da savaşa hazır mı?
crowne

Aynı sorunla karşı karşıya kaldım ve eklenti sürümünü güncelleyerek çözdüm.
TechnocratSid

Yanıtlar:


359

Maven-war-plugin'inizin bir kod snippet'ini sağlamanız yararlı olacaktır. Görünüşe göre web.xmldoğru yerdedir, yine de konumu açıkça deneyebilirsiniz

<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
Benim için de çalıştı, teşekkürler. Ancak Maven'in aradığı varsayılan konum nedir?
Buffalo

5
Ben maven savaş eklentisini 2.1.1'den 2.4'e güncelledim ve varsayılan konumu wen uzaklaştırmak gerekiyor.
xverges

2
ItelliJ IDEA kullanıcıları için yanıtınızı güncellemek isteyebilirsiniz - IntelliJ başka bir proje yapısı oluşturur, böylece <webXml> web \ WEB-INF \ web.xml </webXml>
Vic Torious

Cevabınızı denedim ama bunun yerine hala aynı hatayı aldım "C: \ Users \ xxxx \ Videos \ maven-projects \ my-project \ src \ webapp \ WEB-INF" ve iyi çalıştı. Sorunun ne olduğunu bilmiyorum. Bu benim şansım. Teşekkür ederim
Bunny Joel

1
Harika çalıştı! Thx :)
yanike

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

Bu çözüm benim için çalışıyor (daha önce 2.2 kullanıyordum). Ayrıca, Servlet 3.0 için Java Tabanlı Yapılandırma kullanıyorum ve web.xml dosyasına gerek yok.


Bu eklentinin 3.x sürümleri artık failOnMissingWebXml varsayılan değerine sahiptir false. Yani, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> yeterli olmalı.
Eisenknurr

olduğu gibi benim için çalıştı ve hala jboss-web.xml kullanıyorum - teşekkürler!
JGlass

Web.xml olmayan bir projem var ve bu benim için çalıştı. Maven yapımı başarılı.
blueSky

81

Benim için de mükemmel çalışıyor.

<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
Yukarıdaki özellikler faset etkinleştirildiğinde ve WebContent web.xml dosyasının girdiği klasörde çalışır.
Ram


23

XML tabanlıdan Java tabanlı yapılandırmaya geçiyorsanız ve WebApplicationInitializer'ı uygulayarak web.xml gereksinimini kaldırdıysanız, web.xml dosyasının mevcut olması gereksinimini kaldırın.

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

benzer cevap daha önce verildi
Paul Verest

Bu, çizginin tam olarak gitmesi gereken bağlamı verir.
Foo

20

Çalışmak için webXml etiketimin değeri aşağıdaki gibi görünüyordu:

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

kesinlikle! Başlangıçta sadece bir eğik çizgi olduğunu görene kadar anlayamadım <warSourceDirectory>\src\main\webapp</warSourceDirectory>! V2.6'da değil
Adam

19

Ben tam olarak aynı sorunu vardı ve ben böyle çözdü:

Adlı yeni bir klasör yapın WEB-INFaltında src/main/webbappo zaman

Projenize Sağ Tıklayın -> Java EE Araçları -> Dağıtım Tanımlayıcı Saplaması Oluştur

Bu, web.xml

Umarım bu sorununuzu çözerek yardımcı olur: D


13

Doğru konumda web.xml varmış gibi görünüyor, ancak buna rağmen, bu hata genellikle Maven'in görmeyi beklediği dizin yapısıyla eşleşmiyor. Örneğin, Maven ile oluşturmaya çalıştığınız bir Eclipse webapp ile başlarsanız.

Sorun buysa, hızlı bir düzeltme bir
src/main/javave bir
src/main/webappdizin (ve gerekirse diğer dizinleri) oluşturmak ve dosyalarınızı taşımaktır.

Maven dizini düzenine genel bakış: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html


6

Varsayılan proje yolunu değiştirirseniz, web.xml dosyasının konumunu belirtmeniz gerekir, örneğin:

        <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

Belgelere göre şöyle diyor: web.xml dosyası eksikse derlemenin başarısız olup olmayacağı. Web.xml dosyası olmadan WAR oluşturulmasını istiyorsanız false olarak ayarlayın. Web.xml dosyası olmayan bir kaplama oluşturuyorsanız bu yararlı olabilir. Varsayılan değer: true. Kullanıcı özelliği: failOnMissingWebXml.

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

Umarım daha açık hale getirir


5

Benim için de çalıştı.

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

Çalışır, ancak günlükleri şimdi diyor ki: WEB-INF\web.xml already added, skipping. Bu garip, bunu eklemediğimde hatayı aldım.
erwineberhard

Erwineberhard ile aynı. WEB-INF\web.xml already added, skipping
Prachi

4

mvn-war-plugin 2.3 bunu düzeltir:

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

4

Test sunucusunda aynı hatayı aldım ama yerel olarak değil. Birkaç dakika sonra IDE'nin pom.xml ile senkronize olmadığını keşfettim. İşte nasıl çözdüğüm:

Eclipse ile dağıtım tanımlayıcısını yeniden oluşturun

  1. Proje klasörünüze sağ tıklayın
  2. Bağlam menüsünde "Java EE Araçları" nı ve ardından "Dağıtım Tanımlayıcı Saplaması Oluştur" u seçin Web.xml oluşturun
  3. Web.xml dosyasını oluşturacaktır. proje yapısında web.xml

IntelliJ ile dağıtım tanımlayıcısını yeniden oluşturun

  1. Proje klasörünüze sağ tıklayın
  2. Bağlam menüsünde "Modül Ayarlarını Aç" ı seçin, ardından web dağıtım tanımlayıcısını eklemek için + işaretini tıklayın. Dağıtım tanımlayıcısını oluşturma
  3. Ardından, tanımlayıcınızın veya Web Kaynağı Kaynak Dizinlerinin ve sağ tarafın yolunu değiştirebilirsiniz .
  4. Sonra şöyle bir şey alacaksınız: Proje yapısı

1
ve netbeans'ta: proje düğümünü> Yeni> Diğer> Web> Standart Dağıtım Tanımlayıcısını (web.xml) sağ tıklayın.
perişan

2

Pom.xml dosyasının Project klasörüne düzgün bir şekilde yerleştirildiğinden emin olun. hedef klasörde veya başka bir yerde değil.

Görünüşe göre pom.xml nispeten hizalanmamış.


2

Klasör yapınız artık dosya /src/main/webapp/WEB-INF/web.xml adresinde artık kalmayacak şekilde değiştirildi mi?

Bu sorunu çözmek için, web klasörüme webapp adını verdim ve src / main içine yerleştirdim. Maven, varsayılan olarak /src/main/webapp/WEB-INF/web.xml adresinde web.xml dosyasını arıyor gibi görünüyor . Bunu yaparsanız, maven'e web.xml'nin nerede olduğunu açıkça söylemenize gerek yoktur. Klasör yapınızı değiştirdiyseniz ve derlemeniz yakın zamanda çalışmayı durdurduysanız, nedeni bu olabilir.

Not: Bu eski bir yazıdır, ancak gönderilen çözümler çalışan bir yapının neden aniden çalışmayı durduracağına işaret etmez.


2

Birçok cevap var ve çoğu işe yarayacak, ama bence daha az önemi olmayan bir nokta daha ekleyeceğim.
Günlük mesajınıza göre kullanıyorsunuz maven. Maven, bazı sözleşmelere dayanan bir proje yönetimi-oluşturma aracıdır. Projeyi derler, uygun dizin yapısı oluşturur ve dosyaları Sun Microsystems Directory Structure StandardJava EE / Web uygulamaları için uygun dizinlere yerleştirir .

Maven eklentileri, proje kök dizinini değiştirme / yeniden yapılandırma vb. Gibi birçok şeyi dahil edebilirsiniz, ancak yapabileceğiniz basit bir adım vardır ve projeniz iyi olmalıdır. Sadece web.xmlaltına yerleştirin src\main\webapp\WEB-INF\ve projeyi ile inşa etmeye çalışın mvn package.

Umarım bu soruna biraz daha fazla ışık ekler.


1

Bu hata Maven'e pakage dosyalarını savaşa bildirdiğiniz için oluşur .

<packaging>war</packaging>

Gerçekten savaşa mı ihtiyacınız var? Değilse, oraya kavanoz koyun. İşte tam kod:

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

kavanoz ve savaş tamamen farklı hikayeler. Arşivin web kapsayıcısına dağıtıldığı ve bağımsız bir kavanoz uygulaması olarak ayrı olarak çalıştırılmadığı için burada savaşın gerekli olduğunu düşünüyorum.
Giorgi Tsiklauri

1

20 failOnMissingWebXml 2020'den beri

Maven-war-eklentisi tarafından kullanılan varsayılan değer değiştiği için , diğer tüm yanıtlar geçersiz olabilir :

Proje Servlet 3.0 API'sine veya daha yenisine bağlıysa, 3.1.0'dan başlayarak bu özellik varsayılan olarak false değerine ayarlanır.

Yani yapmanız gereken tek şey

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

Misal:

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.