Maven 中的“需要 webxml 属性”错误
Posted
技术标签:
【中文标题】Maven 中的“需要 webxml 属性”错误【英文标题】:"webxml attribute is required" error in Maven 【发布时间】:2011-07-18 03:22:23 【问题描述】:我收到以下错误:
组装 WAR 时出错:需要 webxml 属性(如果在更新模式下执行,则需要预先存在的 WEB-INF/web.xml)
我在正确的位置找到了web.xml
,即projectname\src\main\webapp\WEB-INF\web.xml
这可能是什么原因造成的?
【问题讨论】:
你的包装在 pom 中是否准备好了? 我遇到了同样的问题,更新插件版本解决了。 【参考方案1】:这是一个老问题,答案很多,大部分都会或多或少有帮助;但是,有一个非常重要且仍然相关的点,没有一个答案涉及(相反,提供了不同的技巧来使构建成为可能),而且我认为它的重要性丝毫不亚于......相反. 根据您的日志信息,您使用的是项目管理工具Maven,严格遵循conventions, over configuration原则。
Maven 构建项目时:
-
它希望您的项目具有特定的目录结构,以便它知道在哪里可以期待什么。这称为
Maven's Standard Directory Layout
;
在构建期间,它还会创建适当的目录结构并将文件放置到相应的位置/目录中,这符合 Java EE [web] 应用程序的 Sun Microsystems Directory Structure Standard
。
您可以合并许多东西,包括 maven 插件、更改/重新配置项目根目录等,但更好和更容易的是遵循配置的默认约定,根据该约定,(现在是您问题的答案)那里一个简单的步骤可以使您的项目工作:只需将您的 web.xml
放在 src\main\webapp\WEB-INF\
下,然后尝试使用 mvn package
构建项目。
【讨论】:
【参考方案2】:确保在编译你的战争之前运行mvn install
。
【讨论】:
【参考方案3】:根据文档,它说:如果 web.xml 文件丢失,是否使构建失败。如果您希望在没有 web.xml 文件的情况下构建 WAR,请设置为 false。如果您正在构建没有 web.xml 文件的覆盖,这可能很有用。 默认值为:真。 用户属性为:failOnMissingWebXml。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<extensions>false</extensions>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
希望它更清楚
【讨论】:
【参考方案4】:它也对我有用。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>WebContent\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
【讨论】:
它有效,但日志现在显示:WEB-INF\web.xml already added, skipping
。这很奇怪,当我不添加这个时,我得到了错误。
与 erwineberhard 相同。 WEB-INF\web.xml already added, skipping
【参考方案5】:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
这个解决方案对我有用(我之前使用的是 2.2)。另外,我正在为 Servlet 3.0 使用基于 Java 的配置,并且不需要 web.xml 文件。
【讨论】:
该插件的 3.x 版本现在将 failOnMissingWebXml 默认设置为false
。所以,<plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin>
就足够了。
像以前一样为我工作,并且仍在使用 jboss-web.xml - 谢谢!
我有一个没有 web.xml 的项目,这对我有用。 Maven 构建成功。【参考方案6】:
? failOnMissingWebXml 自 2020 年起
关于the default value used by the maven-war-plugin changed的所有其他答案可能已过时:
从 3.1.0 开始,如果项目依赖于 Servlet 3.0 API 或更高版本,则此属性默认为 false。
所以你要做的唯一就是添加
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
示例:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<tomcat.ignorePackaging>true</tomcat.ignorePackaging>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
【讨论】:
【参考方案7】:出现此错误是因为您告诉 Maven 将文件打包到 war。
<packaging>war</packaging>
你真的需要战争吗?如果没有,把罐子放在那里。 这是完整的代码:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>1.0-SNAPSHOT</version>
<groupId>com.your.groupid</groupId>
<artifactId>artifactid</artifactId>
<packaging>jar</packaging>
【讨论】:
罐子和战争是完全不同的故事。我认为这里需要战争,因为存档正在部署到 Web 容器中,并且没有作为独立的 jar 应用程序单独运行。【参考方案8】:我遇到了完全相同的问题,我是这样解决的:
然后在src/main/webbapp
下新建一个文件夹WEB-INF
右键单击您的项目 -> Java EE 工具 -> 生成部署描述符存根
这应该会生成您的web.xml
我希望这有助于解决您的问题:D
【讨论】:
【参考方案9】:这是因为你没有在你的 web 项目中包含 web.xml 并试图使用 maven 构建战争。要解决此错误,您需要在 pom.xml 文件中将 failOnMissingWebXml 设置为 false。
例如:
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
更多详情请查看博客:https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html
【讨论】:
【参考方案10】:我在测试服务器上遇到了同样的错误,但在本地没有。几分钟后,我发现 IDE 没有与 pom.xml 同步。这是我的解决方法:
用 Eclipse 重新生成部署描述符
-
右键单击您的项目文件夹
在上下文菜单中,选择“Java EE 工具”,然后选择“生成部署描述符存根”
它将创建 web.xml。
使用 IntelliJ 重新生成部署描述符
-
右键单击您的项目文件夹
在上下文菜单中,选择“打开模块设置”,然后单击 + 以添加 Web 部署描述符。
然后您可以更改描述符的路径或Web资源目录以及右侧的。
然后你会得到类似:
【讨论】:
在 netbeans 中,您可以:右键单击项目节点 > 新建 > 其他 > Web > 标准部署描述符 (web.xml)。【参考方案11】:您的文件夹结构是否已更改,因此文件不再位于 /src/main/webapp/WEB-INF/web.xml 中?
为了解决这个问题,我将我的 web 文件夹命名为 webapp,并将其放在 src/main.xml 中。默认情况下,Maven 似乎在 /src/main/webapp/WEB-INF/web.xml 中查找 web.xml。如果你这样做,那么你不需要明确告诉 maven web.xml 在哪里。如果您更改了文件夹结构并且您的构建最近停止工作,这可能就是原因。
注意:这是一篇旧帖子,但发布的解决方案没有指出为什么工作构建会突然停止工作。
【讨论】:
【参考方案12】:如果你能提供你的 maven-war-plugin 的代码 sn-p 将会很有帮助。
看起来web.xml
在正确的位置,您仍然可以尝试明确给出位置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>src\main\webapp\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
【讨论】:
也为我工作,谢谢。但是 Maven 搜索的默认位置是什么? 我刚刚将 maven war 插件从 2.1.1 更新到 2.4,不再需要明确默认位置。 您可能希望为 ItelliJ IDEA 用户更新您的答案 - IntelliJ 创建另一个项目结构,因此它将是如果您正在从基于 XML 的配置迁移到基于 Java 的配置,并且通过实现 WebApplicationInitializer 消除了对 web.xml 的需求,则只需消除对存在 web.xml 文件的需求。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
...
</configuration>
【讨论】:
之前给出了类似的答案 这个给出了上下文,该行需要去哪里。【参考方案14】:mvn-war-plugin 2.3 修复了这个问题:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
</plugin>
...
【讨论】:
【参考方案15】:如果更改默认项目路径,则必须指定web.xml文件的位置,例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.5</version>
<configuration>
<webXml>src\main\web\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
【讨论】:
【参考方案16】:确保 pom.xml 正确放置在 Project 文件夹中。而不是在目标文件夹或其他任何地方。
看起来 pom.xml 没有相对对齐。
【讨论】:
【参考方案17】:看起来您的 web.xml 确实位于正确的位置,但即便如此,此错误通常是由于目录结构与 Maven 期望看到的不匹配造成的。例如,如果您从尝试使用 Maven 构建的 Eclipse Web 应用开始。
如果这是问题所在,快速解决方法是创建一个src/main/java
和一个src/main/webapp
目录(以及其他目录,如果您需要它们)并移动您的文件。
这里是 maven 目录布局的概述: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
【讨论】:
【参考方案18】:我的 webXml 标记的值需要看起来像这样才能工作:
<webXml>$project.basedir\src\main\webapp\WEB-INF\web.xml</webXml>
【讨论】:
没错!直到我看到我在开头只有一个斜线时才弄清楚<warSourceDirectory>\src\main\webapp</warSourceDirectory>
不起作用!不在 v2.6 中【参考方案19】:
它也适合我。
<project>
.....
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>WebContent\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
【讨论】:
上述方法在启用构面并且 WebContent 是 web.xml 所在的文件夹时有效。以上是关于Maven 中的“需要 webxml 属性”错误的主要内容,如果未能解决你的问题,请参考以下文章
Maven 组装 WAR 时出错:使用纯基于 Java 的配置构建 SpringMVC 项目且没有 xml 时需要 webxml 属性