背景

一直以来习惯用docker配置一些本地学习环境,许多教程配置activiti的方式都是通过复制activiti的war包部署在tomcat中,我尝试了一下通过docker的方式遇到了一些不易察觉的错误。

使用方式描述

  1. 使用docker安装tomcat9.0 docker run -d -p 8080:8080 --name tomcat tomcat:9.0
  2. 复制activiti的war包使用docker安装的tomcat部署activiti-app.war、activiti-admin.war失败(ClassNotFoundException)-LMLPHP
  3. 浏览器访问404使用docker安装的tomcat部署activiti-app.war、activiti-admin.war失败(ClassNotFoundException)-LMLPHP

分析

  1. 使用docker desktop view detail(根据tomcat的版本不同也会有其它的类的ClassNotFoundException)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1412)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1220)
... 186 more
  1. 进一步查看tomcat的log日志初步猜测是jdk版本问题。
  2. 查看tomcat容器环境变量使用docker安装的tomcat部署activiti-app.war、activiti-admin.war失败(ClassNotFoundException)-LMLPHP
  3. 查看官网文档得知需要jdk1.7+,也许jdk17过高,切换成jdk8也许可以。
  4. 使用jdk8的tomcat,直接使用tomcat7.0的镜像。

结果

使用docker安装的tomcat部署activiti-app.war、activiti-admin.war失败(ClassNotFoundException)-LMLPHP

07-17 22:03