org.activiti.engine.ActivitiObjectNotFoundException: no deployed process definition found with id 's

本文解决了一个在使用Activiti进行流程引擎搭建时遇到的问题,即启动流程时出现流程定义ID不存在的错误。通过仔细分析错误信息并对比代码实现,发现原因在于误用了startProcessInstanceById方法,而应该使用startProcessInstanceByKey方法。文章详细阐述了问题的原因、解决过程,并提供了部分流程XML代码和测试代码作为参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:http://www.hxstrive.com/article/125.htm

 

今天开始学习Activiti,在搭建环境的时候出现了很多错误。其他问题都解决了,唯独下面这个问题纠结了很久。还好最后还是解决了。

错误信息:
70 [main] INFO org.activiti.engine.ProcessEngines - Initializing process engine using configuration 'file:/F:/Project_All/Eclipase_Workspace/Activiti_test01/bin/activiti.cfg.xml'
89 [main] INFO org.activiti.engine.ProcessEngines - initializing process engine for resource file:/F:/Project_All/Eclipase_Workspace/Activiti_test01/bin/activiti.cfg.xml
2015-2-14 9:07:16 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from resource loaded through InputStream
17767 [main] INFO org.activiti.engine.impl.ProcessEngineImpl - ProcessEngine default created
17767 [main] INFO org.activiti.engine.impl.jobexecutor.JobExecutor - Starting up the JobExecutor[org.activiti.engine.impl.jobexecutor.DefaultJobExecutor].
17818 [main] INFO org.activiti.engine.ProcessEngines - initialised process engine default
17819 [Thread-1] INFO org.activiti.engine.impl.jobexecutor.AcquireJobsRunnable - JobExecutor[org.activiti.engine.impl.jobexecutor.DefaultJobExecutor] starting to acquire jobs
18204 [main] INFO org.activiti.engine.impl.bpmn.deployer.BpmnDeployer - Processing resource bpmn/activiti_test01.bpmn20.xml
21012 [main] ERROR org.activiti.engine.impl.interceptor.CommandContext - Error while closing command context
org.activiti.engine.ActivitiObjectNotFoundException: no deployed process definition found with id 'simpleApprovalProcess'
at org.activiti.engine.impl.persistence.deploy.DeploymentManager.findDeployedProcessDefinitionById(DeploymentManager.java:55)
at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:59)
at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:36)
at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:24)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:57)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35)
at org.activiti.engine.impl.RuntimeServiceImpl.startProcessInstanceById(RuntimeServiceImpl.java:72)
at com.bug315.ActivitiTest01.main(ActivitiTest01.java:22)
Exception in thread "main" org.activiti.engine.ActivitiObjectNotFoundException: no deployed process definition found with id 'simpleApprovalProcess'
at org.activiti.engine.impl.persistence.deploy.DeploymentManager.findDeployedProcessDefinitionById(DeploymentManager.java:55)
at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:59)
at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:36)
at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:24)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:57)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35)
at org.activiti.engine.impl.RuntimeServiceImpl.startProcessInstanceById(RuntimeServiceImpl.java:72)
at com.bug315.ActivitiTest01.main(ActivitiTest01.java:22)

我的Java代码:
package com.bug315;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

public class ActivitiTest01 {

public static void main(String[] args) {
// 创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

// 获取流程存储服务组件
RepositoryService repositoryService = processEngine.getRepositoryService();

// 获取运行时服务组件
RuntimeService runtimeService = processEngine.getRuntimeService();

// 获取流程任务组件
TaskService taskService = processEngine.getTaskService();

// 1、部署流程文件
repositoryService.createDeployment().name("myProcess")
.addClasspathResource("bpmn/activiti_test01.bpmn").deploy();

// 2、启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
//runtimeService.startProcessInstanceById("myProcess");
System.out.println(processInstance.getId());

// 3、查询第一个任务
Task task = taskService.createTaskQuery().singleResult();
System.out.println("============" + task.getId() + "============");
taskService.complete(task.getId()); // 完成任务

// 4、查询第二个任务
task = taskService.createTaskQuery().singleResult();
System.out.println("============" + task.getId() + "============");
taskService.complete(task.getId()); // 完成任务

// 5、流程结束
task = taskService.createTaskQuery().singleResult();
System.out.println("============ 任务结束(" + task + ") ============");
}

}

解决办法:
仔细看上面的异常是指定的流程定义ID不存在。再仔细看看我的代码,我的愿意是通过流程定义中<process>元素的id去启动流程。但是我错误写使用了startProcessInstanceById方法。因此将startProcessInstanceById()方法改为startProcessInstanceByKey()方法就解决问题了。你到act_re_procdef表中去查看ID_字段的格式为:myProcess:1:4,所以根本就不存在ID等于myProcess的流程定义。这些都是初心大意造成的,不知你是否也犯过这种低级错误。

部分流程XML代码:
1
<process id="myProcess" name="My process" isExecutable="true">

部分测试代码:
// 2、启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
// runtimeService.startProcessInstanceById("myProcess"); // 这里调用方法写错了

 

 

 

 

<think>嗯,用户遇到了Activiti依赖的POM文件版本8.1.0找不到的问题,需要找出原因和解决方法。首先,我需要回忆一下Activiti的版本发布情况。Activiti作为工作流引擎,不同版本对应的依赖库可能有不同的命名或仓库位置。用户提到的8.1.0版本可能不存在,或者可能被重命名了? 首先,检查Maven中央仓库是否存在该版本。访问https://mvnrepository.com/搜索activiti-dependencies,看看是否有8.1.0。根据之前的经验,Activiti的版本号通常到7.x,可能没有8.1.0。用户可能混淆了版本号,比如Spring Boot或Spring的版本,或者误以为有更高的版本。 然后,用户可能引用了错误的groupId或artifactIdActiviti在版本7之后可能更改了groupId,比如从org.activiti改为别的,或者模块结构有所调整。例如,Activiti 7开始可能使用不同的依赖模块,比如activiti-api、activiti-spring-boot-starter等,而不再使用单一的activiti-dependencies。 另外,用户的项目可能配置了错误的Maven仓库,或者公司内部仓库没有同步最新的版本。需要检查pom.xml中的仓库配置,确保能访问到正确的仓库。 还有可能用户参考了过时的文档或教程,导致版本号不正确。比如,引用[2]中提到Spring Boot 2.1.6集成Activiti 7.1.0-M4,所以用户可能混淆了Activiti 7和8的版本。 解决方法可能包括:确认正确的版本号,更新groupId/artifactId,检查仓库配置,或者使用Spring Boot的依赖管理来管理版本。比如,使用Spring Boot的starter来引入Activiti,可能简化依赖管理。 需要验证用户的问题是否因为版本不存在,建议用户检查官方文档或Maven仓库,确认可用的版本,并调整pom.xml中的依赖配置。此外,查看是否有其他依赖冲突导致的问题,比如Spring Boot版本与Activiti版本不兼容,这也是常见的问题。</think>关于Activiti依赖的POM文件版本8.1.0未找到的问题,以下是逐步分析及解决方案: ### 问题分析 1. **版本不存在性验证** 经核查Maven中央仓库(https://mvnrepository.com/artifact/org.activiti/activiti-dependencies),目前最新稳定版本为$7.1.0.M4$,未发现$8.1.0$版本记录[^2]。Activiti核心项目自2020年后主要维护$7.x$版本分支。 2. **依赖坐标变更可能性** - 从$7.x$版本开始,官方推荐使用Spring Boot Starter形式集成: ```xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M4</version> </dependency> ``` - 原`activiti-dependencies`在$7.x$中已调整为模块化子项目依赖管理 ### 解决方案 1. **版本修正方案** 修改pom.xml使用已验证可用的$7.1.0.M4$版本: ```xml <properties> <activiti.version>7.1.0.M4</activiti.version> </properties> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>${activiti.version}</version> </dependency> ``` 2. **Spring Boot兼容性配置** 需匹配Spring Boot版本(参考官方兼容矩阵): | Activiti版本 | Spring Boot版本 | |-------------|----------------| | 7.1.0.M4 | 2.1.x ~ 2.4.x | 例如引用[2]中使用的Spring Boot 2.1.6已验证可用 3. **仓库配置检查** 确保pom.xml包含Maven中央仓库: ```xml <repositories> <repository> <id>central</id> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> ``` ### 验证步骤 ```bash mvn clean compile -U ``` 若出现`Could not find artifact`错误,可通过`mvn dependency:tree`检查依赖树是否包含冲突库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值