«1. Введение

В этом руководстве мы обсудим распространенную ошибку Eclipse, «web.xml отсутствует, а для \u003cfailOnMissingWebXml\u003e установлено значение true», которую мы получаем при создании веб-приложения.

2. Ошибка Eclipse

В веб-приложениях Java web.xml является стандартным именем дескриптора развертывания.

Мы можем создать веб-приложение, используя Maven, или динамический веб-проект, используя Eclipse. Eclipse не создает дескриптор развертывания по умолчанию web.xml в каталоге WEB-INF/.

В спецификациях Java EE 6+ была предпринята попытка уменьшить значение дескрипторов развертывания, поскольку их можно заменить аннотациями. Тем не менее, более низкие версии по-прежнему требуют этого.

Свойство failOnMissingWebXml является одним из свойств военного подключаемого модуля Apache Maven, org.apache.maven.plugins:maven-war-plugin. Значение по умолчанию для этого подключаемого модуля — true для версии \u003c 3.1.0 и false для более поздних версий.

Это означает, что если мы используем maven-war-plugin более ранней версии, чем 3.1.0, а файл web.xml отсутствует, то цель упаковать его как военный файл не удастся.

3. Использование web.xml

Во всех случаях, когда нам все еще нужен дескриптор развертывания web.xml, мы можем легко сгенерировать web.xml в Eclipse:

    Щелкните правой кнопкой мыши веб-проект Наведите курсор на Java EE Инструменты в меню Выберите «Создать заглушку дескриптора развертывания» в подменю

Вуаля! файл web.xml создается в каталоге WEB-INF/.

4. Без web.xml

В большинстве случаев нам может вообще не понадобиться файл web.xml. Вместо того, чтобы хранить пустой файл web.xml в нашем проекте, мы можем просто вообще не создавать его. К счастью, есть два простых подхода, в зависимости от используемой версии maven-war-plugin.

4.1. Использование maven-war-plugin До версии 3.1.0

Мы можем настроить все плагины проекта Maven в разделе \u003cplugins\u003e нашего pom.xml. Как мы уже говорили ранее, значение по умолчанию для failOnMissingWebXml равно true до версии плагина 3.1.0.

Давайте объявим maven-war-plugin в нашем pom.xml и явно установим для свойства failOnMissingWebXml значение false:

4.2. Использование maven-war-plugin 3.1.0 и более поздних версий

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

Мы также можем избежать явной установки свойства, обновив версию maven-war-plugin. Значение по умолчанию свойства failOnMissingWebXml равно false для maven-war-plugin версии 3.1.0 и выше:

5. Заключение

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.1.0</version>
</plugin>

В этой статье мы рассмотрели причину отсутствия ошибки web.xml и несколько подходов к исправлению.

Как обычно, наш пример можно найти на GitHub.

«