我设法通过java -jar
命令运行了一个spring-boot Web应用程序。但是,当将包装字段更改为war(在pom.xml中)并将其构建为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)
我的问题是:
对我来说,这似乎是一个糟糕的WAR文件(根本不应该嵌入嵌入式tomcat罐子WEB-INF/lib
)。您需要做的只是将Tomcat嵌入式jar标记为scope=provided
构建配置中的标记。用于将JAR转换为WAR的GS指南是标准配置选项的很好参考,并且Spring Boot代码库中有多个示例。
如果您的应用程序未使用tomcat的Web套接字功能,则它仍应与旧版本一起使用(因此,请随时在github中引发问题)。对您来说,最简单的解决方法是仅升级tomcat(7.0.47应该可以)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句