首页 文章

在Docker中将Java War部署到Tomcat,在类路径上检测到错误No Spring WebApplicationInitializer类型

提问于
浏览
0

在本地,我通常会成功地将此战争部署到Wildfly,但是尝试使用Tomcat并获得错误 .

在TravisCI中,我正在用Maven和OpenJDK7 Build 我的战争

language: java
jdk:
  - openjdk7
script:
  - mvn package

这会在target / classes rules-1.0-SNAPSHOT surefire generated-sources rules-MODELS-1.0-SNAPSHOT.jar surefire-reports jacoco.exec rules.war test-classes maven-archiver site 中创建以下内容

然后我将目标/在Docker容器中的战争部署到Tomcat 8-JRE7 FROM tomcat:8 ADD target/rules.war /usr/local/tomcat/webapps/ CMD ["catalina.sh", "run"]

Tomcat启动,但在localhost.log中我看到org.apache.catalina.core.ApplicationContext.log没有在类路径上检测到Spring WebApplicationInitializer类型

20-Jun-2016 02:12:30.827 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log在类路径上检测不到Spring WebApplicationInitializer类型20-Jun-2016 02:12:30.835 SEVERE [localhost] -startStop-1] org.apache.catalina.core.StandardContext.listenerStart配置类org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap的应用程序监听器时出错java.lang.ClassNotFoundException:org.jboss.resteasy.plugins.server位于org.apache.catalina.core上的org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1332)的.servlet.ResteasyBootstrap位于org.apache.catalina.core上的org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166) .defaultInstanceManager.loadClass(DefaultInstanceManager.java:518)位于org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:499)org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)at at org.apache.catalina.core.St org.apache.listenerStart(StandardContext.java:4764)org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303)org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)at org .apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)org.apache.catalina.core.StandardHost.addChild(StandardHost) .java:717)在java.util的org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:940)org.apache.catalina.startup.HostConfig $ DeployWar.run(HostConfig.java:1816) . concurrent.Executors $ runnableAdapter.call(Executors.java:471)java.util.concurrent.FutureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java .util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)20-Jun-2016 02:12:30.867 SEVERE [localhost-startStop-1] org.apac he.catalina.core.StandardContext.listenerStart由于先前的错误而跳过安装的应用程序侦听器

我读了一些类似警告的帖子,建议从JDK 1.8迁移到1.7,但我目前正在使用OpenJDK7(maven build)和JRE7(Tomcat docker) . 我是否应该从目标/战争以外部署其他任何东西?

1 回答

  • 0

    您需要在可部署模块中具有WebInitializer,以便向Tomcat通知调度程序servlet配置 . 这应该是一个扩展WebApplicationInitializer接口的任何实现的类 .

    例:

    public class GatewayWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
        // ...
    }
    

相关问题