web.xml 丢失并且 <failOnMissingWebXml> 设置为 true

Posted

技术标签:

【中文标题】web.xml 丢失并且 <failOnMissingWebXml> 设置为 true【英文标题】:web.xml is missing and <failOnMissingWebXml> is set to true 【发布时间】:2015-10-28 09:04:36 【问题描述】:

考虑:

当我在Eclipse 中创建一个简单的Maven 项目时,我收到了这个错误:

web.xml 丢失,&lt;failOnMissingWebXml&gt; 设置为 真的

我该如何解决这个问题?

【问题讨论】:

您需要添加maven-war-plugin。这是一个隐式插件,其中该配置属性的默认值为 true。您需要显式声明它并将配置属性设置为 false。查看更多here。或者你可以添加一个空的 web.xml 【参考方案1】:

这是一个 Maven 错误。它表示它在您的项目中需要一个 web.xml 文件,因为它是一个 Web 应用程序,如 &lt;packaging&gt;war&lt;/packaging&gt; 所示。但是,对于最近的 Web 应用程序,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>

【讨论】:

这个答案比其他答案更符合逻辑。 如果您使用的是 Servlet 3.0+ 环境并且有任何Interface WebApplicationInitializer 的实现,则此答案是正确的方法。这是解决这个问题的明智方法——在没有它的情况下添加web.xml 是没有意义的! 这比创建一个空的 web.xml 更好 即使没有 Maven 也可以工作 > 更新项目。所以不需要。 请按照below 的建议考虑更新您的答案以获得更短的配置。包括&lt;properties&gt;&lt;failOnMissingWebXml&gt;false&lt;/failOnMissingWebXml&gt;&lt;/properties&gt; 就足够了,而不是更冗长的插件配置设置。【参考方案2】:

你也可以这样做:

    Project Explorer中右键单击Deployment Descriptor。 选择生成部署描述符存根

它会在src/main/webapp中生成WEB-INF文件夹和一个web.xml

【讨论】:

我不建议将样板代码添加到代码中,因为您的构建工具会出错。 @MartijnBurger 你能告诉我们上述黑客可能产生的影响吗?如果可能的话,还可以添加一些其他替代方案吗? - 会帮助像我这样的新手程序员。谢谢。 请参阅下面的答案以获取替代方案。上面的解决方案没有错,只是您应该始终努力使最终产品尽可能干净。使用上面的解决方案,您的最终产品将得到一个不必要的web.xml 文件。您应该改为在构建工具(即 maven)中解决此问题。 您也可以参考:eggsylife.co.uk/2009/12/20/… 这将在您的项目中添加不必要的文件,其他事情是 web.xml appprocah 是旧的。如果您想删除此错误,则只需强制更新 maven 错误就会消失【参考方案3】:

如果 /src/main/webapp/WEB-INF 下已有 web.xml,但仍然收到错误“web.xml is missing and is set to true”,您可以检查是否包含 / src/main/webapp 在您的项目源代码中。

您可以按照以下步骤操作:

    您可以通过右键单击您的项目并打开其属性对话框来检查这一点,然后打开“部署程序集”,您可以在其中添加文件夹 /src/main/webapp。保存设置,然后, 转到 Eclipse 菜单 Project -> Clean... 并清理项目,错误应该会消失。

(我用 Eclipse Mars 验证了这一点)

【讨论】:

在“Eclipse Mars”下遇到了同样的问题,您描述的解决方案非常完美!谢谢 对我不起作用...我已经有了这些文件夹,我什至尝试将 web.xml 设置为 false。它不工作....【参考方案4】:

你也可以这样做,不那么冗长

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

【讨论】:

最优雅的解决方案恕我直言。请参阅doc(和一个旧的日食bug,它阻止了这个解决方案的工作,现在解决了)。【参考方案5】:

如果您使用 Spring Tool Suite,Generate Deployment Descriptor Stub 选项将移至 Java EE Tools 下,因此您:

    右键单击您的项目 选择 Java EE 工具 选择生成部署描述符存根选项

这将在 src/main/webapp/WEB-INF/ 文件夹中创建 web.xml 文件,当然还会从 Maven 的 pom.xml 文件中删除错误。

【讨论】:

【参考方案6】:

我也有同样的问题。经过学习和谷歌搜索,我已经解决了我的问题:

右击项目文件夹,进入Java EE Tools,选择Generate Deployment Descriptor Stub。这将在文件夹src/main/webapp/WEB-INF 中创建web.xml

【讨论】:

我不建议将样板代码添加到代码中,因为您的构建工具会出错。【参考方案7】:

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>

保存此设置后,如果将其删除,则永远不会发生错误。 (我无法解释为什么。)

【讨论】:

【参考方案8】:

我遇到了同样的问题,即使我的 'src/main/webapp/WEB-INF/' 文件夹具有正确的 web.xml

在我重新创建(maven->eclipse)配置后问题消失了 Maven build..我执行了mvn eclipse:clean eclipse:eclipse

然后我使用Maven -&gt; Update Project 添加(eclipse->maven)插件特定选项。

【讨论】:

这里也一样,虽然我用了 git reset --hard HEAD 谢谢,这对我也有帮助。右键 -> Maven -> 更新项目【参考方案9】:

我只在 Eclipse 中遇到了这个问题,在 Maven 命令行中一切正常,并且我的 web.xml 文件存在。这是一个受到影响的成熟项目(已经在生产中部署)。我的问题与 eclipse 元数据有关。我的 .settings/ 文件夹中的一个文件存在问题,特别是 org.eclipse.wst.common.component 已更改。我能够将此文件恢复到之前的版本,从而解决了我的问题。

请注意,榆次的回答对我不起作用,当我尝试点击eclipse属性中的Deployment Assembly时,出现“当前显示的页面包含无效值”的错误。

【讨论】:

我遇到了同样的情况,不得不从我的 .settings/ 文件夹中恢复 org.eclipse.wst.common.component 文件,我的项目现在可以工作了,显然组件的内容被删除了,所以它没有不是我的 web.xml 文件的路径。此外,当我尝试在 Eclipse 属性中打开部署程序集时,出现了同样的错误:“当前显示的页面包含无效值。”我发现这个答案有点晚了,但这就是我解决它的方法。顺便说一句,答案很好。【参考方案10】:

对于存在 web.xml 的项目 Project-->Properties-->Deployment Assembly,在这里可以添加文件夹src/main/webapp。 保存更改。 清理项目以开始工作。

对于不存在 web.xml 的项目 在 pom.xml 中的 properties 标签下将 failOnMissingWebXml 设置为 false。

【讨论】:

【参考方案11】:

这样做:

去并右键单击部署描述符,然后单击生成部署描述符存根。

【讨论】:

【参考方案12】:

您需要将此标签添加到您的 pom.xml 中

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

【讨论】:

【参考方案13】:

请在 POM.XML 中的结束标记 之前添加以下 XML 代码

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

这应该可以解决您缺少 WEB.XML 文件的错误。

【讨论】:

【参考方案14】:

创建一个 web.xml 只是 elcipse 想要它是没有意义的,即使没有必要。如果您像 spring-boot 那样嵌入了 servlet conatiner 或没有 xml cfg,就会出现这种情况。 您只是在项目级别或全局的 Eclipse 中禁用 JavaEE(无用的东西)

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

【讨论】:

【参考方案15】:

-web/.setting&-admin/.setting

中删除文件

【讨论】:

这个选项对我有用【参考方案16】:

选择您的项目 并选择“部署描述符”选项 然后选择“生成部署描述符存根”

【讨论】:

【参考方案17】:

步骤:选择您的项目并选择“部署描述符”选项,然后选择“生成部署描述符存根”工作正常。问题是我们并不总是需要 web.xml,所以最好在 pom.xml 后面加上 false

【讨论】:

【参考方案18】:

右击project --&gt; New --&gt; Other --&gt; Standard Deployment Descriptor(web.xml)

然后按下一步,它将创建WEB-INF 文件夹,其中包含web.xml 文件。

大功告成。

【讨论】:

【参考方案19】:

我的项目与战争无关,但同样的错误。我不得不从 eclipse 中删除项目,从项目文件夹中删除所有 eclipse 文件并重新导入 maven 项目。

【讨论】:

【参考方案20】:

在 src/webapp 中创建 WEB-INF 文件夹,然后在 WEB-INF 文件夹中包含 web.xml 页面

【讨论】:

【参考方案21】:

右击项目,进入Maven -> Update Project...,然后勾选Force Update of Snapshots/Releases,然后点击Ok 。完成了!

【讨论】:

以上是关于web.xml 丢失并且 <failOnMissingWebXml> 设置为 true的主要内容,如果未能解决你的问题,请参考以下文章

web.xml中配置 http强制跳转https,防端口丢失

xml 包括以下内容,以避免maven抱怨web.xml,如果它丢失

将Spring Boot RESTful Web Service部署到Tomcat时,Web.xml仍然丢失

Hibernate的懒加载session丢失解决方法

web.xml

web.xml