我收到以下错误:
汇编WAR时出错:需要webxml属性(如果在更新模式下执行,则预先存在的WEB-INF / web.xml)
我在web.xml
projectname\src\main\webapp\WEB-INF\web.xml
导致这种情况的原因是什么?
答案 0 :(得分:343)
如果您可以提供maven-war-plugin的代码段,将会很有帮助。
看起来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>
答案 1 :(得分:130)
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
此解决方案适用于我(之前我使用的是2.2)。另外,我使用Java Based Configuration for Servlet 3.0,不需要web.xml文件。
答案 2 :(得分:80)
它也适合我。
<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>
答案 3 :(得分:24)
这是因为您没有在web项目中包含web.xml并尝试使用maven构建war。要解决此错误,您需要在pom.xml文件中将 failOnMissingWebXml 设置为 false 。
例如:
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
请参阅博客了解详情:https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html
答案 4 :(得分:20)
如果要从基于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>
答案 5 :(得分:19)
我的webXml标记的值需要看起来像这样才能工作:
<webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml>
答案 6 :(得分:14)
我遇到了完全相同的问题,我解决了这个问题:
在WEB-INF
下创建名为src/main/webbapp
的新文件夹,然后
右键单击项目 - &gt; Java EE工具 - &gt;生成部署描述符存根
这应生成您的web.xml
我希望通过解决您的问题来解决这个问题:D
答案 7 :(得分:13)
看起来好像你在正确的位置有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
答案 8 :(得分:6)
如果更改默认项目路径,则必须指定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>
答案 9 :(得分:5)
mvn-war-plugin 2.3解决了这个问题:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
</plugin>
...
答案 10 :(得分:5)
它也适合我。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>WebContent\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
答案 11 :(得分:5)
根据文档,它说:如果缺少web.xml文件,是否使构建失败。如果您希望在没有web.xml文件的情况下构建WAR,请设置为false。如果要构建没有web.xml文件的叠加层,这可能很有用。 默认值为:true。 用户属性为:failOnMissingWebXml。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<extensions>false</extensions>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration> </plugin>
希望它更清楚
答案 12 :(得分:4)
我在测试服务器上遇到了同样的错误,但在本地没有。几分钟后,我发现IDE没有与pom.xml同步。以下是我如何解决它:
答案 13 :(得分:4)
关于其他所有答案的答案可能已过时,因为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>
答案 14 :(得分:2)
确保将pom.xml正确放置在Project文件夹中。而不是在目标文件夹或其他任何地方。
看起来pom.xml没有相对对齐。
答案 15 :(得分:2)
您的文件夹结构是否已更改,因此文件不再位于 /src/main/webapp/WEB-INF/web.xml ?
要解决此问题,我将web文件夹命名为webapp并将其放在src / main中。默认情况下,Maven似乎在 /src/main/webapp/WEB-INF/web.xml 中查找web.xml。如果你这样做,那么你就不需要明确地告诉maven web.xml在哪里。如果您更改了文件夹结构,并且您的构建最近停止了工作,那么这就是原因。
注意:这是一篇旧帖子,但发布的解决方案并未指出为什么工作版本会突然停止工作。
答案 16 :(得分:2)
发生此错误是因为您告诉Maven将文件包装到 war 。
<packaging>war</packaging>
你真的需要战争吗?如果没有,请将jar放在那里。 这是完整的代码:
<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>
答案 17 :(得分:0)
答案很多,大多数都可以,但是我还要再说一点,我认为这一点同样重要。
根据您的日志消息,您正在使用maven
。 Maven是基于某些约定的项目管理构建工具。它会构建项目,创建适当的目录结构,并将文件放入Java Java EE / Web应用程序符合Sun Microsystems Directory Structure Standard
的相应目录中。
您可能会合并许多内容,包括maven插件,更改/重新配置项目根目录等,但是您可以执行一个简单的步骤,您的项目就可以了。只需将web.xml
放在src\main\webapp\WEB-INF\
下,并尝试使用mvn package
构建项目。
我希望这可以为这个问题提供更多的启示。
答案 18 :(得分:0)
确保在编译战争之前运行 mvn install
。