Eclipse Error: web.xml is missing and failOnMissingWebXml is set to true

1. Introduction

In this tutorial, we’ll discuss the common Eclipse error, “web.xml is
missing and <failOnMissingWebXml> is set to true
“, that we get while
creating a web application.

2. Eclipse Error

In Java web applications,
web.xml
is the standard name of the deployment descriptor.

We can create a web application using Maven or a dynamic web project
using Eclipse. Eclipse doesn’t create the default deployment descriptor
web.xml under the WEB-INF/ directory.

Java EE 6+ specifications have attempted to de-emphasize deployment
descriptors, as they can be replaced by annotations
. However, the lower
versions still require it.

The failOnMissingWebXml property is one of the properties of the
Apache Maven war plugin,
org.apache.maven.plugins:maven-war-plugin. The default value of this
plugin is true for version < 3.1.0 and false for the later versions.

This means that if we’re using maven-war-plugin earlier than version
3.1.0, and the web.xml file is not present, then the goal to package
it as a war file will fail.

3. Using web.xml

For all the cases where we still need the web.xml deployment
descriptor, we can easily generate web.xml in Eclipse:

  • Right click on the web project

  • Hover to Java EE Tools on the menu

  • Select Generate Deployment Descriptor Stub from the sub-menu

 

Voila! the web.xml file is generated under the WEB-INF/ directory.

4. Without web.xml

In most cases, we may not require the web.xml file at all. Instead of
keeping a blank web.xml file in our project, we can simply skip
creating it altogether. Luckily, there are two simple approaches,
depending on which version of the maven-war-plugin we’re using.

4.1. Using maven-war-plugin Before 3.1.0

We can configure all the plugins of a Maven project in the <plugins>
section of our pom.xml. As we’ve said previously, the default value
for failOnMissingWebXml is true before version 3.1.0 of the plugin.

Let’s declare the maven-war-plugin in our pom.xml and explicitly
set the property failOnMissingWebXml to false
:

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

4.2. Using maven-war-plugin 3.1.0 and Later

We can also avoid setting the property explicitly by upgrading the
version of maven-war-plugin. The default value of the property
failOnMissingWebXml is false for maven-war-plugin version 3.1.0
and later:

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

5. Conclusion

In this article, we saw the reason behind the missing web.xml error
and multiple approaches to fix it.

As usual, our example can be found
over
on GitHub
.

Leave a Reply

Your email address will not be published.