Activiti 6.0源码初探
一、Github工作方式
![](https://i-blog.csdnimg.cn/blog_migrate/26ed62ab23ae3fb8b6199b1da01f7a4f.png)
Activiti Admin为Activiti官方管理员所维护的库。
采用从官方库fork一份到自己的库,然后再克隆,可以实现在修改完本地代码后交到自己的库中,而若是直接从官方克隆是不能实现的。若我们提交到自己的库中的代码是有价值的,可以向官方库发起一个请求,他们的运维管理员通过之后,会将代码推送到官方库,这样就为开源软件做贡献。并且一个项目的fork数体现了该项目的受欢迎程度。若要实时更新Activiti的代码,可以从Activiti库中pull一份,然后提交到自己的库中。
二、克隆源码并编译
1.克隆源码
git clone
git@github.com:shaoyucao/Activiti.git
2.进入到Activiti中并进行checkout创建分支操作cd
cd Activiti
git checkout -b study6 activiti-6.0.0
#以activiti-6.0.0为分支分化一个新分支study6,并切换到study6
![](https://i-blog.csdnimg.cn/blog_migrate/93287d613dd49db8a5226c273baf3183.png)
3.编译
mvn clean test-compile
#mvn clean清除编译生成的文件,mvn test-compile ,对源码进行编译,包括test/java,main/java下面的源码
![](https://i-blog.csdnimg.cn/blog_migrate/a20a15ac26175e98314756815937954b.png)
发现编译前后两者的文件内容是不一样的
编译前:
![](https://i-blog.csdnimg.cn/blog_migrate/8660033e1637c97ebd641ae3e68faaa9.png)
编译后:
![](https://i-blog.csdnimg.cn/blog_migrate/c3fee7436274b875e89f298c1fe2a5fd.png)
编译完成后,将Activiti整个文件拷贝到pc的IDEA的工作目录,然后选择用IDEA打开即可。
![](https://i-blog.csdnimg.cn/blog_migrate/903a19684a73f3782307052342a994e6.png)
三、Activiti的主要结构
1.activiti工作目录
![](https://i-blog.csdnimg.cn/blog_migrate/c075d385795fdc9cbf27734632812edc.png)
1)
distro
发布用的目录,
eclipse
为
eclipse工具
开发所用的配置文件,
modules
为源码的模块包结构,
qa
为质量相关的文件,
scripts
为启动的脚本,
tooling中为
脚手架工程
2)maven工程主要的是pom.xml文件,其中有很多个module,最主要的是activiti-engine,依赖到各个模块的构建
![](https://i-blog.csdnimg.cn/blog_migrate/5a2c1691e127f4fa0f06ea7edd5ac7ef.png)
查看modules中的activiti-engine结构
![](https://i-blog.csdnimg.cn/blog_migrate/c11caf4bd4439c2b055fb2c5e1ba9047.png)
3)查看main/java下面的结构:
![](https://i-blog.csdnimg.cn/blog_migrate/ccdd6ba190249102b5283e33a8d63079.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e97315e522301becab325e15c95bd576.png)
cfg为配置文件相关,compatibility为兼容性相关,Activiti5到Activiti6有一部分不兼容是在这里做适配;debug为调试相关,使用它可以更清楚地看到一些日志;delegate为比较重要的包结构,一些重要的节点如serviceTask都需要通过其中的JavaDelegate去实现。event为节点的进入和退出等定义了一些监听机制;form为一些通用的表单;history处理存放一些执行完的数据;identity为个人身份校验相关;impl为对应的一些实现;logging为日志相关,其中只有一个LogMDC,management为流程管理相关的接口和api,parse为解析流程文件.xml,做解析相关的操作;query定义了一些抽象的查询接口;repository为流程部署到数据库相关的过程;runtime为流程执行过程中的一些处理;task处理人工任务或者需要第三方处理的过程,test为Activiti非常友好地提供单元测试的类
外面的文件为:异常相关;参数不合法;对象找不着;比较关注的是最外层的几个Service
结论:越是重要的类越是放在外面
4)查看在main/resources文件结构
![](https://i-blog.csdnimg.cn/blog_migrate/fe8fed5556a32e00eaee8c770104f5b6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dbbd4aee6255ac0cb9e1773a884e436c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5843d248a31f7c01985233a7ba0bb972.png)
META-INF.services为配置了Juel的script,db下为关于数据库的一些脚本的创建,分为db2, h2, hsql, mssql(微软的sql), mysql, oracle, pg等数据库,mapping中为mybatis的配置文件;properties中为数据库的配置文件(方言不同),upgrade为版本升级的时候对于sql语句的升级,bpmn.deployer中为一些小图标,LocalStrings为本地化的文件
5)查看test/java和test/resources文件结构
![](https://i-blog.csdnimg.cn/blog_migrate/34d564a51a3159c13e669bee2af3d7bf.png)
Activiti中自己配置了一些单元测试类,resources为单元测试相关的资源
四、
activiti
核心模块
module/activiti-engine 核心引擎
module/activiti-spring Spring集成模块
module/ activiti-spring-boot Spring-boot集成模块
module/activiti-rest 对外提供rest api模块
module/activiti-form-engine 表单引擎模块
module/activiti-ldap 集成ldap用户的模块(与公司或企业的用户体系做集成)
![](https://i-blog.csdnimg.cn/blog_migrate/05c01d7b1df238f1e2a6dfe370268fcd.png)
bpmn-converter对应模型转换,process-validation对应于模型、流程的校验是否合法,image-generator为流程图绘制的模块、dmn-api为新的决策的标准。