手把手教大家编译 flowable 源码

Posted _江南一点雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教大家编译 flowable 源码相关的知识,希望对你有一定的参考价值。

要说这个编译源码其实没什么技术含量,但是由于国内的网络问题,Spring 等各种常见框架的源码编译都变成了一个有技术含量的工作,你得学会去解决各种在编译的过程中可能出现的问题。

今天松哥就来和大家聊一聊 flowable 源码编译,其实主要是和大家说说这里的几个坑。

1. 下载源码

这个简单,大家直接从 GitHub 上将源码 clone 下来即可:

git clone git@github.com:flowable/flowable-engine.git

这一步比较容易,大家应该都不存在问题。

2. IDEA 打开项目

由于这个源码也是一个 Maven 工程,所以接下来直接 IDEA 打开源码即可。

松哥亲测,master 分支上的代码有点问题,所以建议大家切换到一个稳定的版本上再去编译。

官方目前在 GitHub 上发布的最新 release 版本是 6.7.2 这个版本,所以为了源码编译顺利,接下来在右下角找到 6.7.2 这个版本,并切换:

切换完成之后,接下来我们要先来看看源码中每个目录都是干嘛的。

  • distro
  • docker:这个里边放的是将 flowable 构建成 docker 镜像的脚本。
  • docs:这个是文档。在 docs/docusaurus/docs 目录下有官方已经构建好的现成的脚本,我们也可以执行 docs/userguide/src/zh_CN/form 等目录下的脚本文件,构建自己需要的文档。一般来说不需要,直接看官方文档就够用了。
  • ide-settings:这个目录下放的是 Eclipse 和 IDEA 中的配置文件,辅助开发用的,但是感觉实际作用有限,我们平时开发也很少导入这两个配置,大家了解即可。
  • k8s:看目录就知道,这个里边放的是 flowable 支持 K8s 的一些脚本和配置。
  • modules:flowable 中的所有核心功能代码都在这个里边了。
  • qa:这个里边是 flowable 各种各样的配置模版,不过我们现在基本上都是 Spring Boot 开发,很多时候并不需要手动再去配置什么,都是直接上来写业务就行了,所以这些配置模版大家了解下即可。
  • scripts:这个目录下放了一些常用的脚本,例如执行 build-all.sh 脚本用来构建项目。
  • tooling:这个目录中的内容给出了一个单元测试的模版。
  • LICENSE:开源协议等。
  • README.md:介绍文档。

好了,整体上了解了之后,现在大家知道,modules 目录才是核心。

不过,由于模块较多,IDEA 不一定总是能够识别出所有的 Maven 项目,如果一个项目的 pom.xml 是红色而不是蓝色,就说明 IDEA 没能识别出来这个 Maven 项目,像下面这样:

此时我们要打开这个 pom.xml 文件,然后鼠标右键单击,选择 Add as Maven Project,如下:

使之成为一个正儿八经的 Maven 工程。

最终的结果,就是确保所有 Maven 工程都是黑色的而不是灰色的,就表示没有问题了,如下图:

第二小节的工作看着很简单,但是实际操作起来非常费事,最大的原因还是网络问题。Maven 经常会下载失败,所以需要大家反复多试,从阿里镜像站切换到华为镜像站,再切换回官方的镜像站,反正就是反复重试,直到需要的依赖都下载成功。

3. 启动 flowable-ui

接下来,我们就可以启动 flowable-ui 这个工程了。

这个工程本质上就是一个 Spring Boot 工程,所以关键是要大家找到启动类,位置在 modules/flowable-ui/flowable-ui-app/src/main/java/org/flowable/ui/application/FlowableUiApplication.java

这个直接启动即可。

启动之后就跟松哥之前给大家介绍的 Flowable-UI 一样了,该咋用咋用.

这里默认使用的是 H2 数据库,H2 是一个 Java 编写的关系型数据库,它可以被嵌入 Java 应用程序中使用,或者作为一个单独的数据库服务器运行。这个 H2 数据库有点类似于移动端的 SqlLite 数据库。

我们打开 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件,可以看到关于 H2 数据库的一些配置信息,如下:

从这个配置中可以看出来三个核心信息:

  • H2 数据库将来会自动生成数据库文件,文件位于系统当前用户目录下,在系统当前用户目录下会自动创建 flowable-db 文件夹,然后在该文件夹下创建 engine-db 文件,就是我们的数据库文件了。
  • H2 数据库的用户名是 flowable。
  • H2 数据库的用户密码是 flowable。

好了,现在我们在 flowable-ui 中,我们新建几个用户和组,如下:

新建四个用户:

新建两个用户组,假设 zhangsan 和 lisi 是主管,wangwu 和 zhaoliu 是经理,如下:

创建完成之后,我们知道这些数据都是保存在 H2 数据库中,像连接 mysql 一样,我们也可以连接 H2 数据库,为了省事,我这里就直接使用 IDEA 中自带的数据库连接工具进行连接了。

步骤如下:

首先点击 Database,然后点击 + 添加一个数据源,选择 H2,如下:

数据库连接类型选择 URL only:

填入用户名、密码以及数据库地址,这些信息都是从刚才的配置文件中拷贝进来的,填完信息之后,会提示你下载数据库驱动,直接点击下载即可,然后点击下方的 Test Connection 按钮,进行测试,看到如下内容表示数据库已经连接上了。

点击 OK,我们就可以看到数据库的连接详情了,如下:

关于每张表的作用,松哥之前都已经写过文章和大家介绍过了,现在我们就去 ACT_ID_USER 表去看一下有没有刚刚创建的四个用户信息:

可以看到,加上 admin 一共有五个用户信息。

相同的道理,ACT_ID_GROUP 表中也可以看到我们创建的组信息:

可以看到,两个用户组都在。

ACT_ID_MEMBERSHIP 表中,我们可以看到用户和用户组之间的关联关系:

松哥在之前文章中给大家演示的所有关于 flowable-ui 的功能,涉及到的数据存储,我们现在都可以在连接上 H2 数据库之后进行查看。

既然说到了 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件,那么我也就顺便多说两句,flowable-ui 默认的用户名密码是 admin/test,如果我们想要修改,则可以直接在该配置文件中修改如下几行即可:

flowable.idm.app.admin.user-id=javaboy
flowable.idm.app.admin.password=123
flowable.idm.app.admin.first-name=江南一点雨
flowable.idm.app.admin.last-name=江南一点雨
flowable.idm.app.admin.email=test-admin@example-domain.tld

中文可能会乱码,大家记得修改 properties 配置文件的编码格式即可。

修改完成之后,记得先去系统当前用户目录下删除掉 flowable-db 文件夹(如果不删除,则之前的用户还在,这次的配置相当于新添加了一个用户),然后重启系统即可,重启之后,我们就可以以 javaboy/123 进行登录了。

4. 连接 MySQL

有时候我们还是希望能够用上自己熟悉的 MySQL,这个也是支持的,还是通过修改 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件来实现,具体做法如下:

首先提前在数据库中准备一个名为 flowable-ui 的空的数据库。

然后注释掉 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件中 H2 的配置,打开 MySQL 的配置,如下:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/flowable-ui?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&nullCatalogMeansCurrent=true
spring.datasource.username=root
spring.datasource.password=123

最后,再在 modules/flowable-ui/flowable-ui-app/pom.xml 文件中加入 MySQL 数据库驱动,如下:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

然后重启项目即可。

当松哥添加 MySQL 驱动的时候,发现官方已经替我们考虑好了,MySQL 驱动提前在多环境中已经配置好了,位置在 modules/flowable-ui/flowable-ui-app/pom.xml,如下图:

所以我们也可以不用自己手动加驱动,直接在在 IDEA 的 Maven 中,选择 profiles,去掉 h2mem,勾选上 mysql 即可,如下图:

然后重新启动项目即可。

5. 接口分析

有的小伙伴们可能说,松哥你这个搞的这么麻烦,我用 flowable-ui 直接 docker 安装,多省事呀!那你就领会错我的意思了,flowable-ui 这个功能我觉得是一个非常棒的 demo,基本上你能想到的 flowable 的功能这里都提供了,现在源码都给你了,你想做啥功能照抄就行了。

我举个例子,比如说我们想新建一个用户,那么我们在前端页面,打开浏览器 DEBUG 窗口,观察添加用户的时候操作的接口,如下:

我们发现添加用户的接口是 /rest/admin/users/idm-app 是模块名称,忽略之),现在,在源码中我们来一个全文搜索,如下:

如果你想自己做一个用户添加的功能,那么照抄不就行了。

其他启动流程、认领任务、完成任务等功能,都按照类似的方式,我们可以查看其代码实现方式。

所以说,这个 flowable-ui 对我们来说其实是一个很好的学习 DEMO。

6. 小结

好啦,本文主要和小伙伴们分析了如何在本地将 flowable 源码编译跑起来,将来松哥还会有多篇文章,以 flowable-ui 为参考,来和大家分析 flowable 中的各种玩法。

以上是关于手把手教大家编译 flowable 源码的主要内容,如果未能解决你的问题,请参考以下文章

手把手教大家编译 flowable 源码

手把手教大家在 Spring Boot 中处理 flowable 中的用户和组

手把手教大家在 Spring Boot 中处理 flowable 中的用户和组

手把手教大家在 Spring Boot 中处理 flowable 中的用户和组

手把手教你使用LabVIEW OpenCV dnn实现图像分类(含源码)

手把手教你反编译别人的app