我收到以下错误:
组装WAR时出错:需要webxml属性(如果以更新模式执行,则必须预先存在WEB-INF / web.xml)
我web.xml
来对地方了projectname\src\main\webapp\WEB-INF\web.xml
是什么原因造成的?
我收到以下错误:
组装WAR时出错:需要webxml属性(如果以更新模式执行,则必须预先存在WEB-INF / web.xml)
我web.xml
来对地方了projectname\src\main\webapp\WEB-INF\web.xml
是什么原因造成的?
Answers:
如果您可以提供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>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
此解决方案对我有效(我之前使用过2.2)。另外,我正在使用基于Java的Servlet 3.0配置,因此不需要web.xml文件。
false
。因此, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin>
就足够了。
它也非常适合我。
<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>
这是因为您没有在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
如果要从基于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>
我有完全相同的问题,我这样解决了它:
制作一个名为新文件夹WEB-INF
下,src/main/webbapp
然后
右键单击您的项目-> Java EE工具->生成部署描述符存根
这应该生成您的 web.xml
我希望这可以解决您的问题:D
看起来好像您在正确的位置具有web.xml,但是即使如此,此错误通常是由于目录结构与Maven期望看到的不匹配而引起的。例如,如果您首先尝试使用Maven构建的Eclipse Webapp。
如果是问题所在,快速解决方案是创建
src/main/java
和
src/main/webapp
目录(如果需要其他目录),然后移动文件。
以下是Maven目录布局的概述:http : //maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
如果更改默认项目路径,则必须指定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>
根据文档,它说:如果缺少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>
希望它更清楚
它也对我有用。
<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
。太奇怪了,当我不添加它时,我得到了错误。
WEB-INF\web.xml already added, skipping
我在测试服务器上有相同的错误,但在本地没有。几分钟后,我发现IDE与pom.xml没有同步。这是我的解决方法:
您的文件夹结构是否已更改,因此文件不再位于/src/main/webapp/WEB-INF/web.xml?
为了解决此问题,我给Web文件夹命名为webapp,并将其放置在src / main中。Maven似乎默认在/src/main/webapp/WEB-INF/web.xml中查找web.xml 。如果这样做,则无需显式告诉maven web.xml在哪里。而且,如果您更改了文件夹结构,并且您的构建最近停止工作,则可能是原因。
注意:这是一篇旧文章,但是发布的解决方案并未指出为什么可以正常工作的构建突然停止工作。
答案很多,大多数都可以使用,但是我想再说一点,我认为这一点同样重要。
根据您的日志消息,您正在使用maven
。Maven是基于某些约定的项目管理构建工具。它构建项目,创建适当的目录结构,并将文件放入与Sun Microsystems Directory Structure Standard
Java EE / Web应用程序兼容的相应目录中。
您可能会合并许多内容,包括maven插件,更改/重新配置项目根目录等,但是您可以执行一个简单的步骤,您的项目就可以了。只要放在web.xml
下面,src\main\webapp\WEB-INF\
并尝试使用构建项目mvn package
。
我希望这可以为这个问题提供更多的启示。
发生此错误的原因是,您告诉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>
关于其他所有答案可能已过时,因为maven-war-plugin使用的默认值已更改:
从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>