Activiti 7+Maven+Idea

1. Activiti 7 介绍

Activiti是一个轻量级的工作流和业务流程管理(BPM)平台,面向业务人员,开发人员和系统管理员。它的核心是用于Java的超快速,坚固的BPMN 2流程引擎。它是开源的,并根据Apache许可进行分发。Activiti可以在任何Java应用程序,服务器,集群或云中运行。它与Spring完美集成,非常轻巧,基于简单的概念。

2. Activiti7 核心

2.1 ProcessEngine

提供对所有公开BPM和工作流操作的服务的访问。

2.2 RuntimeService

RuntimeService:允许创建部署,启动和搜索processinstance。

2.3 TaskService

TaskService:公开用于管理人工(独立)任务的操作,例如声明、完成和分配任务
标识服务:用于管理用户、组及其之间的关系。

2.4 ManagementService

ManagementService:公开引擎管理和维护操作

2.5 HistoryService

HistoryService:服务公开关于正在进行的和过去的流程实例的信息。

新建一个普通maven项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>Activiti_maven</artifactId><version>1.0-SNAPSHOT</version><properties><activiti.version>7.0.0.SR1</activiti.version></properties><dependencies><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!--文件读取--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency><!-- log start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.28</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version></dependency><!-- log end --></dependencies><repositories><repository><id>alfresco</id><name>Activiti Releases</name><url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/</url><releases><enabled>true</enabled></releases></repository></repositories>
</project>

activiti.cfg.xml

添加数据库连接配置,创建activiti数据库

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti" /><property name="jdbcDriver" value="com.mysql.jdbc.Driver" /><property name="jdbcUsername" value="root" /><property name="jdbcPassword" value="123456" /><!--数据库更新模式,会自动创建所需表--><property name="databaseSchemaUpdate" value="true" /></bean>
</beans>

制作bpmn流程文件

需要安装Activiti插件
IDEA 插件安装 File->Settings->Plugins 安装新插件actiBPM插件

可能出现查找不到该插件的情况,则可以actiBPM下载通过插件jar文件本地安装

创建bpmn文件,main->resources鼠标右键new->Bpmn File 创建名为test的流程文件



创建文件并打开界面如下


下面是我已经创建好的bpmn流程文件

该流程是一个简单的请假流程

流程开始 StartEvent --> staff(员工填报请假信息)—> Supervisor(主管审批)–(如果大于等于三天)->manager(经理审批)—>personnel(人事入档)----EndeEvent; 由于我的idea的问题,流程线上的条件没有显示出来;
以下是bpmn换成xml格式后的内容

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1589779081278" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema"><process id="test" isClosed="false" isExecutable="true" processType="None"><startEvent id="_2" name="StartEvent"/><endEvent id="_3" name="EndEvent"/><userTask activiti:assignee="${name}" activiti:exclusive="true" id="_4" name="staff"/><sequenceFlow id="_5" sourceRef="_2" targetRef="_4"/><userTask activiti:assignee="${supervisorName}" activiti:exclusive="true" id="_7" name="Supervisor"/><sequenceFlow id="_8" sourceRef="_4" targetRef="_7"/><userTask activiti:assignee="${personnelName}" activiti:exclusive="true" id="_9" name="personnel"/><userTask activiti:assignee="${managerName}" activiti:exclusive="true" id="_12" name="manager"/><sequenceFlow id="_14" sourceRef="_7" targetRef="_12"><conditionExpression xsi:type="tFormalExpression"><![CDATA[$(num>=3)]]></conditionExpression></sequenceFlow><sequenceFlow id="_16" sourceRef="_7" targetRef="_9"><conditionExpression xsi:type="tFormalExpression"><![CDATA[$(num<3)]]></conditionExpression></sequenceFlow><sequenceFlow id="_17" sourceRef="_9" targetRef="_3"/><sequenceFlow id="_18" sourceRef="_12" targetRef="_9"/></process><bpmndi:BPMNDiagram documentation="background=#282839;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram"><bpmndi:BPMNPlane bpmnElement="test"><bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2"><omgdc:Bounds height="32.0" width="32.0" x="365.0" y="125.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="_3" id="Shape-_3"><omgdc:Bounds height="32.0" width="32.0" x="120.0" y="640.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="_4" id="Shape-_4"><omgdc:Bounds height="55.0" width="85.0" x="345.0" y="210.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="_7" id="Shape-_7"><omgdc:Bounds height="55.0" width="85.0" x="350.0" y="315.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="_9" id="Shape-_9"><omgdc:Bounds height="55.0" width="85.0" x="100.0" y="445.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="_12" id="Shape-_12"><omgdc:Bounds height="55.0" width="85.0" x="345.0" y="450.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="_14" id="BPMNEdge__14" sourceElement="_7" targetElement="_12"><omgdi:waypoint x="390.0" y="370.0"/><omgdi:waypoint x="390.0" y="450.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="_17" id="BPMNEdge__17" sourceElement="_9" targetElement="_3"><omgdi:waypoint x="136.0" y="500.0"/><omgdi:waypoint x="136.0" y="640.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="_16" id="BPMNEdge__16" sourceElement="_7" targetElement="_9"><omgdi:waypoint x="350.0" y="342.5"/><omgdi:waypoint x="185.0" y="472.5"/><bpmndi:BPMNLabel><omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="_18" id="BPMNEdge__18" sourceElement="_12" targetElement="_9"><omgdi:waypoint x="345.0" y="477.5"/><omgdi:waypoint x="185.0" y="472.5"/><bpmndi:BPMNLabel><omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="_5" id="BPMNEdge__5" sourceElement="_2" targetElement="_4"><omgdi:waypoint x="381.0" y="157.0"/><omgdi:waypoint x="381.0" y="210.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="_4" targetElement="_7"><omgdi:waypoint x="390.0" y="265.0"/><omgdi:waypoint x="390.0" y="315.0"/><bpmndi:BPMNLabel><omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

流程的Key值,后面可以通过key值找到指定流程
节点名称staff,Assignee 使用${name} 可在实例化流程时指定员工
剩下的节点同理,
name:Supervisor Assignee: ${supervisorName}
name: personnel Assignee: ${personnelName}
name: manager Assignee: ${managerName}

指定执行条件
以下是运行demo

package com.jm;import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;public class application {public static void main(String[] args) {//流程引擎的抽象,可以通过此类获取需要的所有服务。ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();Model.setProcessEngine(processEngine);System.out.println("ProcessEngine:" + processEngine.getName() + "\nversion:" + ProcessEngine.VERSION);System.out.println("========================流程引擎的抽象,可以通过此类获取需要的所有服务==================================");//获取流程仓库serviceRepositoryService repositoryService = processEngine.getRepositoryService();//添加部署流程Deployment deploy = repositoryService.createDeployment().addClasspathResource("test.bpmn").name("请假流程").deploy();//创建查询ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery();//查询全部流程List<ProcessDefinition> processDefinitionList = definitionQuery.list();for (ProcessDefinition p : processDefinitionList) {System.out.println("流程名称" + p.getName() + "" +"\n Id:" + p.getId() +"\n 流程文件:" + p.getResourceName()+"\n 流程版本:"+p.getVersion());}System.out.println("==========================查询全部流程================================");//查询指定流程ProcessDefinition processDefinition = definitionQuery.deploymentId(deploy.getId()).singleResult();System.out.println("流程名称" + processDefinition.getName() + "" +"\n Id:" + processDefinition.getId() +"\n 流程文件:" + processDefinition.getResourceName()+"\n 流程版本:"+processDefinition.getVersion());System.out.println("==========================查询指定流程================================");ProcessDefinition definition = definitionQuery.orderByProcessDefinitionVersion().desc().singleResult();System.out.println("流程名称" + definition.getName() + "" +"\n Id:" + definition.getId() +"\n 流程文件:" + definition.getResourceName()+"\n 流程版本:"+definition.getVersion());System.out.println("===========================获取最新版本流程===============================");boolean isContinue=true;Scanner scanner=new Scanner(System.in);String key="test";while(isContinue){System.out.println("开始请假流程:");//获取runtimeServerRuntimeService runtimeService = processEngine.getRuntimeService();//请假流程kye   testMap<String,Object> map=new HashMap<String, Object>();System.out.println("请假人姓名:");String staffName = scanner.next();map.put("name",staffName);System.out.println("主管姓名:");String supervisorName = scanner.next();map.put("supervisorName",supervisorName);System.out.println("经理姓名:");String managerName = scanner.next();map.put("managerName",managerName);System.out.println("人事姓名:");String personnelName = scanner.next();map.put("personnelName",personnelName);System.out.println("请输入请假天数:");float num = scanner.nextFloat();map.put("num",num);ProcessInstance activiti_test = runtimeService.startProcessInstanceByKey(key, map);System.out.println("已提交"+deploy.getName()+"[id:"+activiti_test.getProcessDefinitionId()+"]");//获取taskServerTaskService taskService = processEngine.getTaskService();TaskQuery taskQuery = taskService.createTaskQuery().processDefinitionKey(key);Task staffTask = taskQuery.taskAssignee(staffName).singleResult();if (staffTask!=null){System.out.println("员工["+staffTask.getAssignee()+"]填写完整信息");taskService.complete(staffTask.getId());System.out.println("员工["+staffTask.getAssignee()+"]填写完整信息--完成");}Task supervisorTask = taskQuery.taskAssignee(supervisorName).singleResult();if (supervisorTask!=null){System.out.println("主管["+supervisorTask.getAssignee()+"]开始审批假条");taskService.complete(supervisorTask.getId());System.out.println("主管["+supervisorTask.getAssignee()+"]已完成审批");}Task managerTask=taskQuery.taskAssignee(managerName).singleResult();if (managerTask!=null){System.out.println("经理["+managerTask.getAssignee()+"]开始审批假条");taskService.complete(managerTask.getId());System.out.println("经理["+managerTask.getAssignee()+"]已完成审批");}Task personnelTask = taskQuery.taskAssignee(personnelName).singleResult();if (personnelTask!=null){System.out.println("人事["+personnelTask.getAssignee()+"]记录入档");taskService.complete(personnelTask.getId());System.out.println("人事["+personnelTask.getAssignee()+"]完成记录入档");}System.out.println("是否还需提交请假申请:true:false");isContinue=  scanner.nextBoolean();}}
}

运行结果

"C:\Program Files\Java\jdk1.8.0_144\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.3.3\lib\idea_rt.jar=5873:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_144\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar;E:\Platform_Deploy\Client\综保区项目\Activiti_maven\target\classes;C:\Users\jm\.m2\repository\org\activiti\activiti-engine\7.0.0.SR1\activiti-engine-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\api\activiti-api-runtime-shared\7.0.0.SR1\activiti-api-runtime-shared-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\api\activiti-api-model-shared\7.0.0.SR1\activiti-api-model-shared-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\activiti-bpmn-converter\7.0.0.SR1\activiti-bpmn-converter-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\activiti-bpmn-model\7.0.0.SR1\activiti-bpmn-model-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\activiti-process-validation\7.0.0.SR1\activiti-process-validation-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\apache\commons\commons-email\1.5\commons-email-1.5.jar;C:\Users\jm\.m2\repository\com\sun\mail\javax.mail\1.5.6\javax.mail-1.5.6.jar;C:\Users\jm\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\jm\.m2\repository\org\apache\commons\commons-lang3\3.8.1\commons-lang3-3.8.1.jar;C:\Users\jm\.m2\repository\org\mybatis\mybatis\3.4.2\mybatis-3.4.2.jar;C:\Users\jm\.m2\repository\org\springframework\spring-beans\5.1.4.RELEASE\spring-beans-5.1.4.RELEASE.jar;C:\Users\jm\.m2\repository\org\springframework\spring-core\5.1.4.RELEASE\spring-core-5.1.4.RELEASE.jar;C:\Users\jm\.m2\repository\org\springframework\spring-jcl\5.1.4.RELEASE\spring-jcl-5.1.4.RELEASE.jar;C:\Users\jm\.m2\repository\de\odysseus\juel\juel-api\2.2.7\juel-api-2.2.7.jar;C:\Users\jm\.m2\repository\de\odysseus\juel\juel-impl\2.2.7\juel-impl-2.2.7.jar;C:\Users\jm\.m2\repository\de\odysseus\juel\juel-spi\2.2.7\juel-spi-2.2.7.jar;C:\Users\jm\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.8\jackson-core-2.9.8.jar;C:\Users\jm\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\jm\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.8\jackson-databind-2.9.8.jar;C:\Users\jm\.m2\repository\joda-time\joda-time\2.10.1\joda-time-2.10.1.jar;C:\Users\jm\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\jm\.m2\repository\mysql\mysql-connector-java\5.1.49\mysql-connector-java-5.1.49.jar;C:\Users\jm\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\jm\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\jm\.m2\repository\org\slf4j\slf4j-api\1.7.28\slf4j-api-1.7.28.jar;C:\Users\jm\.m2\repository\org\slf4j\slf4j-log4j12\1.7.12\slf4j-log4j12-1.7.12.jar" com.jm.application
log4j:WARN No appenders could be found for logger (org.activiti.engine.ProcessEngines).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Tue May 19 10:28:28 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
ProcessEngine:default
version:7.0.0.0
========================流程引擎的抽象,可以通过此类获取需要的所有服务==================================
流程名称nullId:test:1:3流程文件:test.bpmn流程版本:1
==========================查询全部流程================================
流程名称nullId:test:1:3流程文件:test.bpmn流程版本:1
==========================查询指定流程================================
流程名称nullId:test:1:3流程文件:test.bpmn流程版本:1
===========================获取最新版本流程===============================
开始请假流程:
请假人姓名:
严
主管姓名:
杨
经理姓名:
李
人事姓名:
唐
请输入请假天数:
6
已提交请假流程[id:test:1:3]
员工[严]填写完整信息
员工[严]填写完整信息--完成
主管[杨]开始审批假条
主管[杨]已完成审批
经理[李]开始审批假条
经理[李]已完成审批
人事[唐]记录入档
人事[唐]完成记录入档
是否还需提交请假申请:true:false
true
开始请假流程:
请假人姓名:
小明
主管姓名:
杨主管
经理姓名:
卞经理
人事姓名:
李人事
请输入请假天数:
2
已提交请假流程[id:test:1:3]
员工[小明]填写完整信息
员工[小明]填写完整信息--完成
主管[杨主管]开始审批假条
主管[杨主管]已完成审批
人事[李人事]记录入档
人事[李人事]完成记录入档
是否还需提交请假申请:true:false

根据不同的请假天数会走不同的流程,至此一个简单的Activiti7 的流程demo已经完成了;

数据库


activiti数据库表一共有25张,负责支持流程实现和运行
具体的表结构书名可以去官网过着其他地方搜索查看一下,这里就不做详细的说明了

Activiti 7+Maven+Idea相关推荐

  1. springMvc+mybatis+spring 整合 包涵整合activiti 基于maven

    2019独角兽企业重金招聘Python工程师标准>>> 最近自己独立弄一个activiti项目,写一下整合过程: 环境:jdk1.7 tomcat7.0 maven3.5  ecli ...

  2. 基于eclipse开发源码分享-SSM+Activiti的公文管理系统

    基于SSM+Activiti的公文管理系统的设计与实现.项目只是实现了最基本的公文流程的处理,做的不好的地方请大家谅解.项目基于eclipse开发,使用的技术:Spring.SpringMVC.Myb ...

  3. 基于eclipse开发源码分享-SSM+Activiti的公文管理系统,

    基于SSM+Activiti的公文管理系统的设计与实现.项目只是实现了最基本的公文流程的处理,做的不好的地方请大家谅解.项目基于eclipse开发,使用的技术:Spring.SpringMVC.Myb ...

  4. 项目费用管理系统(零)项目代码 SSM+BootStrap+mysql+Maven+Activiti +,,,,,,,

    01. 系统架构:(不太全,有些不写了.后面再贴出来) 数据库设计: 系统截图: 01.控制台: 目前只写了这些,有时间了在进行功能完善,添加.后续会在博客中写出步骤,贴出代码.....现在能运行. ...

  5. pom文件中引入常用的maven仓库

    给大家分享几个maven仓库,如果本地总是下载很慢的话可以尝试换一下仓库或者多加几个.可以直接拖放在pom.xml中使用. 阿里云仓库 <mirrors><mirror>< ...

  6. Activiti——准备开发环境(一)

    准备材料下 activiti-5.17.0 1.添加Activiti5 的jar包或Maven依赖 Jar包方式 通过上述下载链接下载Activiti后,解压得到如下目录: 把libs的jar包添加到 ...

  7. Java项目:学生信息管理系统(java+SSM+JSP+layui+maven+mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 三角色管理: 学生,教师,管理员,在线选课,成绩录入,学生管理,选课管理,教室管理等等.学生管理可以查看所有学生并 ...

  8. Java项目:网上选课系统(java+SSM+jsp+mysql+maven)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能: 系统分为三个角色.最高权限管理员,学生,教师,包括 学生管理,教师管理,课程管理,选课,退课,成绩查 询.,教学课程, ...

  9. Java项目:学生信息管理系统(java+SSM+jsp+mysql+maven)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 用户的登录注册,学生信息管理,教师信息管理,班级信 息管理,采用mvcx项目架构,覆盖增删改查,包括学生, 教币班 ...

  10. Java项目:成绩管理系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 超豪华成绩管理系统,学生,教师,管理员三类用户集 成,课程表管理,成绩查询,成绩详情数据统计,课程录 入,用 ...

最新文章

  1. linux运行dock打包的镜像,Linux部署之Docker方式部署项目
  2. shaderlab学习一
  3. questasim linux安装包,Ubuntu16.04下Questasim10.7安装(64bit)全攻略
  4. QLattice:你不知道的新的机器学习模型
  5. 2017.10.25 打鼹鼠 思考记录
  6. react中form可以嵌套一个form吗_Ant-Design从v3升级到v4的Form适配
  7. python生成linux执行文件_比较Python中两个PyInstaller生成的Linux可执行文件
  8. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第1节 网络通信概述_1_软件结构...
  9. 头歌c语言答案循环结构,C语言的“汤头歌”
  10. kettle的mysql驱动应该放哪里_MySQL数据库之kettle 安装mysql 驱动
  11. 小说网站服务器架构图,搭建小说网站用什么程序?搭建小说网站图文教程_好特教程...
  12. iphone模拟器目录
  13. 转:echarts图表x,y轴的设置
  14. Xshell “所选的用户密钥未在远程主机上注册,请再试一次”SSH 登录远程linux服务器(良心整理)
  15. 椭圆检测 Arc Adjacency Matrix-Based Fast Ellipse Detection 代码和数据集使用教程
  16. 【​观察】 娃娃也能编程?微软“编程一小时”让你家娃也能变身编程达人
  17. 少年五年升阿里 P8,他如何从低谷登上“光明顶”?
  18. JNLP文件详细说明
  19. 《UNIX编程艺术》精彩语录
  20. 黄河水稻山东智慧 国稻种芯·中国水稻节:济南泉城米袋子

热门文章

  1. 读取QQ ClientKey C++版本
  2. CMPP3.0状态报告状态码
  3. maven本地仓库配置
  4. 机器人轨迹规划:三次样条曲线
  5. 基于Tensorflow的MINIST手写体识别
  6. C#实现的简单的随机抽号器
  7. GB2312汉字区位码、交换码和机内码转换方法(转)
  8. 繁星屠龙软件下载_酷狗繁星屠龙下载
  9. frontpage 2010.2003绿色版
  10. OBS 录制没有声音怎么办?