部署弹簧引导应用程序是否需要 web.xml

2022-09-03 00:37:10

我试图将弹簧靴应用程序打包为战争。根据这个,我修改了我的应用程序类:

@SpringBootApplication
@EntityScan({"org.mdacc.rists.cghub.model"}) 
@EnableJpaRepositories(basePackages = {"org.mdacc.rists.cghub.ws.repository"})
public class Application extends SpringBootServletInitializer
{

    public static void main( String[] args )
    {
        SpringApplication.run(Application.class, args);
    }

    @Override
     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
         return application.sources(Application.class);
     }
}

还在我的pom中添加了以下内容.xml

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

当我打包项目时,我得到了以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project cg-web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]

当我阅读弹簧启动应用程序时,我从未见过有关创建web.xml。在部署 spring boot 应用程序时是否需要 web.xml作为战争?


答案 1

根据这个答案,通过向你的pom添加以下片段,使Maven忽略网络.xml缺席.xml:

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

答案 2

您是否具有 Web 依赖项。

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

你可以随时拥有你的web.xml如果你需要一些配置,只需将文件放在WEB-INF中的正确文件夹中,这样spring就可以读取配置。同时将包装更改为

<packaging>war</packaging>

还考虑将父 pom 用于弹簧靴作为

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.2.RELEASE</version>
    </parent>

此配置

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

只告诉 maven 不要在 war 文件中包含 tomcat 依赖项,以避免干扰 servlet 提供程序。


推荐