项目环境
- Maven构建
- 数据库:Orcle12c
- 服务器:Tomcat9
- <java.version>1.8</java.version>
- <activiti.version>6.0.0</activiti.version>
- <springframework.version>5.0.4.RELEASE</springframework.version>
- <mybatis.version>3.4.5</mybatis.version>
问题
问题一:java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException
- 出现原因:Jackson和Spring版本不兼容问题,activiti6中自带的Jackson版本是2.7.5,和spring5不兼容,Jackson版本过低
- 解决思路:查询pom中是否存在jacksonjar包引用,如果存在则在pom的activiti引用中排除jackson的jar包引用
- 解决步骤
- 查看pom引用jar,如下图所示,点击4——>使用3搜索,可以看见activiti-engine下依赖很多jackson的低版本的jar。2.7.5版本和Spring5一定不兼容
图一
-
- 在pom的activiti-engine下排除关于jackson的引用,如下
org.activiti activiti-engine ${activiti.version} com.fasterxml.jackson.core jackson-core com.fasterxml.jackson.core jackson-databind 如果找不到相关的<groupId>和<artifactId>,可以双击图一中的标记2(也就是相关的依赖jar),将会进入到如下界面,找到相关的<groupId>和<artifactId>
- 重新引入高版本Jackson
com.fasterxml.jackson.core jackson-core 2.9.5 com.fasterxml.jackson.core jackson-databind 2.9.5 - 强制更新maven项目,解决问题
- 在pom的activiti-engine下排除关于jackson的引用,如下
问题二:Could not open ServletContext resource [diagrams/test.bpmn]
- 出现原因:在项目启动时自送部署流程的相关配置路径问题,如下图
- 解决办法:在路径前面加上classpath: ,代表在当前资源文件路径下查找
- 如下图,修改自动部署流程路径
问题三:No qualifying bean of type 'org.activiti.engine.ProcessEngine' is defined
- 问题场景
- 我的activiti.cfg.xml中配置如下
classpath:diagrams/test.bpmn - Java类中注入方法如下
@Autowired@Qualifierprivate ProcessEngine processEngine;
- 报错信息如下图
- 我的activiti.cfg.xml中配置如下
- 问题原因
- 在配置文件中,注入的类是org.activiti.spring.ProcessEngineFactoryBean,而在Java中自动注入的实体Bean则是org.activiti.engine.ProcessEngine,两者类型不匹配
- 注解@Autowired默认是按照Bean类型来匹配,而org.activiti.engine.ProcessEngine根本就没有配置注入,所以报错
- 解决办法
- 修改匹配模式为名称匹配,将注解@Qualifier修改为@Qualifier(value="processEngine")
- 虽然两者类型不一样,但是Spring 会自动将org.activiti.spring.ProcessEngineFactoryBean强转成org.activiti.engine.ProcessEngine注入