«Webxml атрибут обязателен» ошибка в Maven


318

Я получаю следующую ошибку:

Ошибка сборки WAR: требуется атрибут webxml (или существующий ранее WEB-INF / web.xml при выполнении в режиме обновления)

Я попал web.xmlв нужное место, котороеprojectname\src\main\webapp\WEB-INF\web.xml

Что может быть причиной этого?


1
ваша упаковка готова к войне в помпе?
конец

Я столкнулся с той же проблемой, и обновление версии плагина решило ее.
ТехнократСид

Ответы:


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 war с 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" и работал хорошо. Я не знаю, в чем проблема. Это моя удача. Спасибо
Банни Джоэл

1
Работал отлично! Спасибо :)
Янике

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

Это решение работает для меня (я использовал 2.2 раньше). Кроме того, я использую конфигурацию на основе Java для 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 прошла успешно.
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
Выше работает, когда включены фасеты и WebContent - это папка, в которую входит web.xml.
Ram

32

Это потому, что вы не включили web.xml в свой веб-проект и не пытаетесь создать войну, используя maven. Чтобы устранить эту ошибку, необходимо установить для falseOnMissingWebXml значение false в файле pom.xml.

Например:

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

Пожалуйста, смотрите блог для более подробной информации: https://ankurjain26.blogspot.in/2017/05/error-assebing-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 -> Создать заглушку дескриптора развертывания

Это должно генерировать ваши web.xml

Я надеюсь, что это помогает, решая вашу проблему: D


13

Похоже, что у вас есть web.xml в правильном месте, но даже в этом случае эта ошибка часто вызывается структурой каталогов, не соответствующей тому, что ожидает Maven. Например, если вы начинаете с веб-приложения Eclipse, которое вы пытаетесь создать с помощью 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». Установите в false, если вы хотите, чтобы WAR создавался без файла web.xml. Это может быть полезно, если вы создаете оверлей, у которого нет файла web.xml. Значение по умолчанию: true. Свойство пользователя: 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

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», затем «Создать заглушку дескриптора развертывания» Генерация web.xml
  3. Это создаст web.xml. web.xml в структуре проекта

Повторно сгенерируйте дескриптор развертывания с IntelliJ

  1. Щелкните правой кнопкой мыши папку вашего проекта
  2. В контекстном меню выберите «Открыть настройки модуля», затем нажмите +, чтобы добавить дескриптор веб-развертывания. Создать дескриптор развертывания
  3. Затем вы можете изменить путь к своему дескриптору или каталогам веб-ресурсов и справа.
  4. Тогда вы получите что-то вроде: Структура проекта

1
и в NetBeans вы должны: щелкнуть правой кнопкой мыши узел проекта> Создать> Прочее> Веб> Стандартный дескриптор развертывания (web.xml).
потрепанный

2

Убедитесь, что pom.xml правильно размещен в папке Project. а не внутри целевой папки или где-либо еще.

Похоже, pom.xml не относительно выровнен.


2

Была ли изменена структура вашей папки, чтобы файл больше не находился в /src/main/webapp/WEB-INF/web.xml ?

Чтобы решить эту проблему, я дал своей веб-папке имя webapp и поместил ее в src / main. Maven, похоже, ищет web.xml по умолчанию в /src/main/webapp/WEB-INF/web.xml . Если вы сделаете это, вам не нужно явно указывать maven, где находится web.xml. И если вы изменили структуру папок и ваша сборка недавно перестала работать, это может быть причиной.

Примечание. Это старый пост, но опубликованные решения не указывают, почему рабочая сборка внезапно перестала работать.


2

Есть много ответов, и большинство из них будут работать, но я добавлю еще один момент, который, я думаю, имеет не меньшее значение.
Согласно вашему сообщению журнала, вы используете maven. Maven - это инструмент для управления проектами, основанный на некоторых соглашениях. Он строит проект, создает правильную структуру каталогов и помещает файлы в соответствующие каталоги, совместимые с приложениями Sun Microsystems Directory Structure StandardJava EE / Web.

Вы можете включить много вещей, включая плагины maven, изменение / перенастройку корневого каталога проекта и т. Д., Но есть один простой шаг, который вы можете сделать, и ваш проект должен быть в порядке. Просто поместите свой web.xmlпод src\main\webapp\WEB-INF\и попробуйте построить проект с mvn package.

Я надеюсь, что это добавляет немного больше света к этой проблеме.


1

Эта ошибка возникает из-за того, что вы приказываете Maven паковать файлы на войну .

<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-приложение.
Георгий Циклаури

1

🔴 failOnMissingWebXml с 2020 года

Все остальные ответы могут быть устаревшими, потому что значение по умолчанию, используемое плагином maven-war, изменилось :

Начиная с 3.1.0, это свойство по умолчанию имеет значение false, если проект зависит от API Servlet 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 и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.