项目环境
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一定不兼容
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
如果找不到相关的<groupId>和<artifactId>,可以双击图一中的标记2(也就是相关的依赖jar),将会进入到如下界面,找到相关的<groupId>和<artifactId>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
强制更新maven项目,解决问题
问题二: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
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
Java类中注入方法如下
@Autowired
@Qualifier
private ProcessEngine processEngine;
报错信息如下图
问题原因
在配置文件中,注入的类是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注入