Файл web.xml отсутствует, а для <failOnMissingWebXml> установлено значение true


142

Рассматривать:

Введите описание изображения здесь

Когда я создаю простой проект Maven в Eclipse, я получаю эту ошибку:

web.xml отсутствует и <failOnMissingWebXml>имеет значение true

Как я могу решить эту проблему?


5
Вам нужно добавить maven-war-plugin. Это неявный плагин, в котором значение по умолчанию для этого свойства конфигурации равно true. Вам необходимо явно объявить это и установить для свойства конфигурации значение false. Подробнее здесь . Или вы можете добавить пустой web.xml
Paul Samsotha

Ответы:


181

Вы также можете сделать это так:

  1. Щелкните правой кнопкой мыши по дескриптору развертывания в Project Explorer .
  2. Выберите « Создать заглушку дескриптора развертывания» .

Он сгенерирует папку WEB-INF в src / main / webapp и web.xml в ней.

введите описание изображения здесь


39
Я бы не советовал добавлять шаблон в код только потому, что ваш инструмент сборки выдает ошибку.
Мартин Бургер

1
@MartijnBurger Можете ли вы рассказать нам о возможных последствиях вышеупомянутого взлома и, если возможно, также добавить некоторые другие альтернативы? - помог бы начинающим программистам, как я. Спасибо.
Сендхилкумар Алаласундарам

7
Смотрите мой ответ ниже для альтернативы. Решение выше не является неправильным, просто вы всегда должны стремиться сделать ваш конечный продукт как можно более чистым. С решением выше, ваш конечный продукт будет иметь ненужный web.xml файл. Вы должны исправить эту проблему в инструменте сборки (т.е. maven).
Мартейн Бургер

Вы также можете обратиться: eggsylife.co.uk/2009/12/20/...
Satyendra

это добавит ненужный файл в ваш проект, и другое дело, что web.xml подходящий. если вы хотите удалить эту ошибку, то просто принудительно обновите maven, ошибка исчезнет
jitendra varshney

393

Это серьезная ошибка. В нем говорится, что он ожидает файл 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
Это лучший ответ, чем создание пустого
файла

1
Работает даже без Maven> Обновление проекта. Так что это не нужно.
Счастливчик

13
Пожалуйста, рассмотрите возможность обновления своего ответа для более короткой конфигурации, как это предлагается ниже . Включая <properties><failOnMissingWebXml>false</failOnMissingWebXml></properties>достаточно вместо более подробных настроек конфигурации плагина.
Оливье Кайо,

32

Если у вас уже есть файл web.xml в каталоге / src / main / webapp / WEB-INF, но вы по-прежнему получаете сообщение об ошибке «web.xml отсутствует и имеет значение true», вы можете проверить, что вы включили / src / main / webapp в источник вашего проекта.

Вот шаги, которые вы можете выполнить:

  1. Вы можете проверить это, щелкнув правой кнопкой мыши по своему проекту, и открыв диалоговое окно «Свойства», а затем «Сборка развертывания», где вы можете добавить папку / src / main / webapp. Сохраните настройки, а затем
  2. Перейдите в меню Eclipse Project -> Очистить ... и очистите проект, и ошибка должна исчезнуть.

(Я проверял это с Eclipse Mars)


Опробовал ту же проблему в разделе «Затмение Марс» и ваше описанное решение отлично работает! Спасибо
Хартмут П.

у меня не сработало ... У меня уже есть эти папки, и я даже попытался установить web.xml, пропуская false. Это не работает ....
Барадвай Арясомайаюла

19

Если вы используете Spring Tool Suite, опция для создания заглушки дескриптора развертывания перемещается в Инструменты Java EE, поэтому вы:

  1. Щелкните правой кнопкой мыши по вашему проекту
  2. Выберите инструменты Java EE
  3. Выберите « Создать заглушку дескриптора развертывания»

Это создаст файл web.xml в папке src / main / webapp / WEB-INF / и, конечно, удалит ошибку из файла Maven pom.xml.

введите описание изображения здесь


16

У меня та же проблема. После изучения и поиска в Google я решил свою проблему:

Щелкните правой кнопкой мыши папку проекта, перейдите Java EE Tools, выберите Generate Deployment Descriptor Stub. Это создаст web.xmlв папке src/main/webapp/WEB-INF.


3
Я бы не советовал добавлять шаблон в код только потому, что ваш инструмент сборки выдает ошибку.
Мартин Бургер

16

Вы также можете сделать это менее подробным

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

Самое элегантное решение ИМХО. Смотрите документ (и старая ошибка Eclipse, которая мешала этому решению работать, теперь решена).
Оливье Кайо,

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 reset --hard HEAD
Маркус Бартлен,

Спасибо, мне это тоже помогло. Щелкните правой кнопкой мыши -> Maven -> Обновить проект
trebor

2

Я столкнулся с этой проблемой только в Eclipse, все работало нормально в командной строке Maven, и мой файл web.xml существовал. Это был зрелый проект (уже развернутый в производстве), который подвергся воздействию. Моя проблема была связана с метаданными затмения. Возникла проблема с одним из файлов в моей папке .settings /, в частности, был изменен org.eclipse.wst.common.component. Мне удалось восстановить этот файл до предыдущей версии, что решило проблему в моем случае.

Обратите внимание, что ответ Юци не сработал для меня, когда я попытался нажать на Deployment Assembly в свойствах eclipse, я получил сообщение об ошибке «текущая страница содержит недопустимые значения».


У меня была такая же ситуация, и мне пришлось восстановить файл org.eclipse.wst.common.component из моей папки .settings /, и мой проект теперь работает, по-видимому, содержимое компонента было удалено, поэтому у него нет пути к моей сети. XML-файл. Также при попытке открыть Deployment Assembly в свойствах eclipse появилась та же ошибка: «отображаемая в данный момент страница содержит недопустимые значения». Я нашел этот ответ немного поздно, но так я его решаю. Отличный ответ, кстати.
Хорхе Вальдес

2

Для Project с web.xml представьте Project -> Properties -> Deployment Assembly, где вы можете добавить папку src / main / webapp. Сохранить изменения. Очистите проект, чтобы начать.

Для проекта с отсутствующим web.xml Установите для failOnMissingWebXml значение false в pom.xml в теге свойств.


1

Сделай это:

Нажмите правой кнопкой мыши на дескриптор развертывания и выберите «Создать заглушку дескриптора развертывания».


0

Создавать web.xml не имеет смысла, просто elcipse хочет этого, даже в этом нет необходимости. Это тот случай, если у вас есть встроенный сервлет conatiner или вы живете без xml cfg, как это делает spring-boot. Вы просто набираете JavaEE (бесполезные вещи) в затмении на уровне проекта или в глобальном масштабе.

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

0

Выберите ваш проект и выберите опцию «Дескриптор развертывания», а затем выберите «Создать заглушку дескриптора развертывания»


0

Шаг: Выберите ваш проект и выберите опцию «Дескриптор развертывания», а затем выберите «Создать заглушку дескриптора развертывания». Проблема в том, что нам не всегда нужен web.xml, поэтому лучше добавить false в pom.xml.


0

Щелкните правой кнопкой мыши на project --> New --> Other --> Standard Deployment Descriptor(web.xml)

1

затем нажмите Далее, это создаст WEB-INFпапку с web.xmlфайлом внутри.

2

Это сделано.




-1

Щелкните правой кнопкой мыши по проекту, перейдите в Maven -> Обновить проект ... , затем проверьте принудительное обновление снимков / выпусков , затем нажмите Ok . Это сделано!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.