Gradle Spring Boot 项目在 Tomcat 中无法作为 WAR 工作

标签 gradle tomcat7 spring-boot embedded-tomcat-7

我有一个使用 Gradle 依赖项在 Spring Boot 中编写的简单示例应用程序。它在调用 localhost:8080/greetings 时说 helloworld。我将其打包为 WAR 并将其作为 myWebApp.war 部署到 Tomcat。

当我调用 localhost:8080/myWebApp/greetings 时,我得到 404。我应该从下面的 catalina.log 推断出什么

  Sep 17, 2014 1:43:09 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.54
Sep 17, 2014 1:43:09 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive D:\C813507\Tomcat7\apache-tomcat-7.0.54\webapps\cftsample.war
Sep 17, 2014 1:43:09 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\C813507\Tomcat7\apache-tomcat-7.0.54\webapps\cftsample\WEB-INF\lib\tomcat-embed-core-7.0.54.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class
Sep 17, 2014 1:43:09 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\C813507\Tomcat7\apache-tomcat-7.0.54\webapps\cftsample\WEB-INF\lib\tomcat-embed-el-7.0.54.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class
Sep 17, 2014 1:43:13 AM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [138] milliseconds.
Sep 17, 2014 1:43:13 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive D:\C813507\Tomcat7\apache-tomcat-7.0.54\webapps\cftsample.war has finished in 4,385 ms

最佳答案

要在独立的 servlet 容器中运行 Spring Boot 应用程序,您需要告诉容器如何启动应用程序。您可以通过扩展 SpringBootServletInitializer 来实现并覆盖 configure方法为您的应用程序提供配置类。这在 getting started guide on converting a jar to a war 中有描述.

你通常会得到一个这样的类:

@Configuration
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {

    // Used when launching as an executable jar or war
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

    // Used when deploying to a standalone servlet container
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

关于Gradle Spring Boot 项目在 Tomcat 中无法作为 WAR 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25884010/

相关文章:

java - 绑定(bind)列表或数组以在 Thymeleaf 中形成

maven - 在Gradle中运行从Maven下载的Java Artifact

gradle - System.out.println 的输出在 gradle 测试中去哪里了?

java - 如何更改 ResourceServerConfiguration 顺序

java - war 文件应该有多大?

Java servlet 无法识别包

spring-boot - 同一消息的 RabbitMQ 多个监听器防止重复监听

java - 使用 gradle 的 3 个项目的复合构建不起作用

gradle - 分类器的gradle依赖

java - Commons HttpClient - PutMethod 套接字错误 - Tomcat 7