![](/img/trans.png)
[英]Deploying a spring-boot application as a war file on a dedicated tomcat is not working
[英]Crash deploying Spring-Boot WAR in Tomcat
我设法使用java -jar
命令运行了一个 spring-boot Web 应用程序。 但是当把打包字段改成war(在pom.xml中)并build成war时,在tomcat 7中运行失败。
我将 pom.xml 的父级设置为:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>0.5.0.M7</version>
</parent>
还有:
public class ApplicationWebXml extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
我得到的错误是:
INFO: Deploying web application archive /home/ichsan/coding/java/tools/apache-tomcat-7.0.39/webapps/hello.war
Jan 4, 2014 10:18:50 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/home/ichsan/coding/java/tools/apache-tomcat-7.0.39/webapps/hello/WEB-INF/lib/tomcat-embed-core-7.0.47.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Jan 4, 2014 10:18:50 PM org.apache.catalina.startup.ContextConfig getServletContainerInitializer
SEVERE: The ServletContentInitializer [org.apache.tomcat.websocket.server.WsSci] could not be created
java.lang.ClassNotFoundException: org.apache.tomcat.websocket.server.WsSci
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
我的问题是:
使用以下几行修改您的pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
这将确保在您部署到服务器时不会将嵌入的 tomcat-server 提供给您的 web 应用程序。
对我来说,这看起来像是一个糟糕的 WAR 文件(嵌入式 tomcat jar 根本不应该在WEB-INF/lib
中)。 您只需要在构建配置中将 tomcat 嵌入式 jar 标记为scope=provided
。 将 JAR 转换为 WAR的GS 指南是标准配置选项的一个很好的参考,并且在 Spring Boot 代码库中有几个示例。
如果您的应用程序没有使用 tomcat 的网络套接字功能,它应该仍然适用于旧版本(因此请随时在github 中提出问题)。 对您来说最简单的修复方法是简单地升级 tomcat(7.0.47 应该可以工作)。
按照 Gradle 文档中的建议,使用 Gradle 中的 providedRuntime 将 tomcat jar 移动到 WEB-INF/lib-provided 文件夹
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.