在Docker中将Java War部署到Tomcat,在类路径

时间:2016-06-20 02:59:14

标签: java spring maven tomcat docker

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

在TravisCI我用Maven和OpenJDK7建立我的战争

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

在目标/中创建以下内容 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类型

  

2016年6月20日02:12:30.827 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log没有在类路径上检测到Spring WebApplicationInitializer类型

     

2016年6月20日02:12:30.835严重[localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart配置类org.jboss.resteasy.plugins.server.servlet的应用程序侦听器时出错。 ResteasyBootstrap    java.lang.ClassNotFoundException:org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap       在org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1332)       在org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)       at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:518)       在org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:499)       在org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)       在org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4764)       在org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303)       在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)       在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)       在org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:940)       在org.apache.catalina.startup.HostConfig $ DeployWar.run(HostConfig.java:1816)       at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471)       在java.util.concurrent.FutureTask.run(FutureTask.java:262)       在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)       在java.lang.Thread.run(Thread.java:745)

     

20-Jun-2016 02:12:30.867 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart由于先前的错误而跳过安装的应用程序监听器

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

1 个答案:

答案 0 :(得分:0)

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

示例:

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