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 丢失,
<failOnMissingWebXml>
设置为 真的
我该如何解决这个问题?
【问题讨论】:
您需要添加maven-war-plugin
。这是一个隐式插件,其中该配置属性的默认值为 true。您需要显式声明它并将配置属性设置为 false。查看更多here。或者你可以添加一个空的 web.xml
【参考方案1】:
这是一个 Maven 错误。它表示它在您的项目中需要一个 web.xml 文件,因为它是一个 Web 应用程序,如 <packaging>war</packaging>
所示。但是,对于最近的 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 的建议考虑更新您的答案以获得更短的配置。包括<properties><failOnMissingWebXml>false</failOnMissingWebXml></properties>
就足够了,而不是更冗长的插件配置设置。【参考方案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 -> 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 --> New --> Other --> 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,如果它丢失