我得到以下错误:

装配WAR: webxml属性是必需的(如果以更新模式执行,则需要预先存在的WEB-INF/web.xml)

我有web.xml在正确的地方,这是projectname\src\main\webapp\WEB-INF\web.xml

是什么导致了这种情况?


当前回答

我在尝试将Spring Boot项目打包为WAR文件并在独立的Tomcat实例中部署该WAR文件时遇到了这条消息。

我使用Spring initializr来生成初始的pom.xml和相关工件。 问题是在pom.xml (Spring版本2.6.+)中,该依赖项已经就位。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

我不得不把它换成这个:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

并且还添加了范围为"provided"的依赖项

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

当然,也改变了包装

<packaging>war</packaging>

其他回答

确保在Project文件夹中正确放置了pom.xml。而不是在目标文件夹或其他任何地方。

看起来pom.xml没有相对对齐。

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

这个解决方案适合我(我以前使用的是2.2)。此外,我使用基于Java的Servlet 3.0配置,不需要有web.xml文件。

我也遇到过同样的问题,我是这样解决的:

然后在src/main/webbapp下新建一个名为WEB-INF的文件夹

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

这将生成web.xml

我希望这有助于解决你的问题:D

看起来web.xml在正确的位置,但即使如此,这个错误通常是由目录结构与Maven期望看到的不匹配引起的。例如,如果您从一个试图用Maven构建的Eclipse web应用程序开始。

如果这是问题所在,一个快速的解决方法是创建一个 Src /main/java和a Src /main/webapp目录(和其他目录,如果你需要他们),只是移动你的文件。

下面是maven目录布局的概述: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

这是一个老问题,有很多答案,其中大多数或多或少都会有所帮助;然而,有一个非常重要的和仍然相关的点,没有一个答案触及(相反,提供了不同的技巧,使构建成为可能),而且,我认为,无论如何,它的重要性都不低。恰恰相反。 根据您的日志消息,您正在使用Maven,这是一个项目管理工具,严格遵循约定,超过配置原则。

当Maven构建项目时:

它期望您的项目具有特定的目录结构,以便它知道在哪里期望什么。这被称为Maven的标准目录布局; 在构建过程中,它还创建了适当的目录结构,并将文件放置到相应的位置/目录中,这符合Java EE [web]应用程序的Sun Microsystems目录结构标准。

你可以合并很多东西,包括maven插件,改变/重新配置项目根目录等,但更好更容易的是遵循默认的约定而不是配置,根据它,(现在是你问题的答案)有一个简单的步骤可以让你的项目工作:只需将你的web.xml放在src\main\webapp\WEB-INF\下,并尝试用mvn包构建项目。