图片 5

依据工作流的阳台管理类别规划

原题目:基于工作流的平台管理种类规划

Activiti工作流引擎使用

图片 1

壹.简单介工作流引擎与Activiti

对此工作流引擎的解释请参考百度健全:行事流引擎

一.简单介工作流引擎与Activiti

对此工作流引擎的演说请参考百度完善:办事流引擎

对于网络经济平台来说,首要的作业愈发是事关资金业务相关操作时都有须求有相关的审查批准流程.同时在流程的漂泊进度中须要和各类业务系统进行互动,达成真正的事体处理,
并记录那几个进度中全体人的操作以及每一步操作时所涉及多少快速照相,以便于内外部审计和题材的追溯.

壹.一 笔者与工作流引擎

在第二家企业管理办公室事的时候根本职分正是开发OA系统,当然基本都以有工作流的援助,可是当下应用的干活流引擎是专营商部分牛人开发的(听大人说是用3个开源的外燃机械修理改的),名为CoreFlow;成效相对Activiti来说相比较弱,不过能满意普通的使用,当然也有好多的题材由此后来我们只好修改引擎的代码打补丁。

当今是小编工作的第3家店铺,因为要开发E瑞鹰P、OA等系统必要动用工作流,在类型调查商量阶段自个儿先找找资料选拔选取哪个开源行事流引擎,最终鲜明了Activiti五并遵照商行的架构做了1部分DEMO。

1.一 作者与工作流引擎

在第1家店铺办事的时候根本职分就是开发OA系统,当然基本都以有工作流的支撑,然而当下选择的做事流引擎是合营社部分牛人开发的(听大人讲是用1个开源的引擎修改的),名字为CoreFlow;作用相对Activiti来说相比较弱,可是能满足普通的采取,当然也有好多的难题由此后来大家只能修改引擎的代码打补丁。

近年来是自家工作的第1家公司,因为要开发E汉兰达P、OA等系统要求使用工作流,在档次调查研商阶段本身先找找资料采用使用哪个开源办事流引擎,最后分明了Activiti五并基于商行的架构做了部分DEMO。

◆✦下边为三个典型的业务流程✦◆

1.2 Activiti与JBPM5?

对于Activiti、jBPM肆、jBPM5咱们理应怎么着选拔,在InfoQ上有1篇文章写的很好,从大的规模相比较各样引擎之间的差距,请参考文章:纵观jBPM:从jBPM3到jBPM5以及Activiti5

1.2 Activiti与JBPM5?

对此Activiti、jBPM四、jBPM5我们应有怎样抉择,在InfoQ上有一篇作品写的很好,从大的框框比较各类引擎之间的距离,请参见小说:纵观jBPM:从jBPM3到jBPM5以及Activiti5

(注: 为了证实方便, 已经简化和修改相关手续, 和点融实际操作分歧等)

1.3 Activiti资料

  • 官网:

  • 下载:

  • 本子:Activiti的本子是从5开始的,因为Activiti是使用jBPM4的源码;本子发布:八个月发表一遍。

  • Eclipse Plugin: 

  • Activit中文群:5435716

1.3 Activiti资料

  • 官网:

  • 下载:

  • 本子:Activiti的版本是从5开始的,因为Activiti是使用jBPM4的源码;本子发表:八个月公布三回。

  • Eclipse Plugin: 

  • Activit中文群:236540304

图片 2

二.起先使用遭逢标题收集

因为Activiti刚刚退出不久所以资料比较空缺,汉语资料更少的可怜,所以起首的时候一只雾水(固然事先用过工作流,不过感觉距离很多),而且官方的手册还不是很完美;所以自个儿把本身在上学生运动用的经过境遇的一些疑忌都位列出来分享给大家;以下几点是本人赶上和想到的,假如您还有怎样疑点能够在评头论足卯月本人调换再补偿。

二.先导使用遭受标题收集

因为Activiti刚刚退出不久所以资料相比空缺,中文资料越来越少的可怜,所以起先的时候二只雾水(固然以前用过工作流,不过感觉距离很多),而且官方的手册还不是很圆满;所以自个儿把本身在读书使用的经过蒙受的局地疑团都位列出来分享给我们;以下几点是本人遇上和想到的,假若您还有如何难点能够在评价卯月作者沟通再补充。

一. 借款人银行卡新闻修改

二.一 安插流程图后中文乱码

乱码是一贯缠绕着国人的题目,从前各样技术、工具出现乱码的难点写过许多小说,那里也不例外……,Activiti的乱码难题在流程图中。

流程图的乱码如下图所示:

图片 3

解决办法有二种:

二.壹 计划流程图后粤语乱码

乱码是直接缠绕着国人的难题,在此以前各种技术、工具出现乱码的题材写过很多篇章,那里也不例外……,Activiti的乱码难题在流程图中。

流程图的乱码如下图所示:

图片 4

化解办法有两种:

该流程发起原因根本是出于借款人银行卡转移原因须求修改. 流程关键步骤为:

贰.一.1 修改源代码情势

修改源码

org.activiti.engine.impl.bpmn.diagram.ProcessDiagramCanvas

在构造方法

public ProcessDiagramCanvas(int width, int height)

中有一行代码是安装字体的,默许是用 Arial 字体,这就是乱码暴发的缘由,把字改为地方的中文字体即可,例如:

Font font = new Font("WenQuanYi Micro Hei", Font.BOLD, 11);

当然要是你有布置文件读取工具那么能够设置在*.properties文件中,小编就是那样做的:

Font font = new Font(PropertyFileUtil.get("activiti.diagram.canvas.font"), Font.BOLD, 11);

2.一.一 修改源代码情势

修改源码

org.activiti.engine.impl.bpmn.diagram.ProcessDiagramCanvas

在构造方法

public ProcessDiagramCanvas(int width, int height)

中有壹行代码是安装字体的,暗许是用Arial字体,那正是乱码产生的原因,把字改为本土的汉语字体即可,例如:

?

1
Font
font =
new
Font(
"WenQuanYi
Micro Hei"
,
Font.BOLD,
11);

自然假设你有配备文件读取工具那么能够设置在*.properties文件中,笔者正是这么做的:

?

1
Font
font =
new
Font(PropertyFileUtil.get(
"activiti.diagram.canvas.font"),
Font.BOLD,
11);

5.12本子起初支持设置字体名称,在内燃机中添加如下设置,在生成图片时即可使用微软雅黑安装图片中的文字。

?

1
<property
name
="activityFontName"
value
="微软雅黑"></property>

❶ 用户联系客户服务职员,提交申请, 包蕴借贷新闻, 手持身份证照片,
银行卡新闻等

贰.一.2 使用压缩包情势布署

Activiti帮助计划*.bpmn20.xml、bar、zip格式的流水生产线定义。

动用Activit Deisigner工具设计流程图的时候会有八个档次的公文:

  • .activiti设计工具使用的文本

  • .bpmn20.xml企划工具自动根据.activiti文件生成的xml文件

  • .png流程图图片

化解办法就是把xml文件和图表文件同时布署,因为在单独安顿xml文件的时候Activiti会自动生成一张流程图的图形文件,可是这么在运用的时候坐标和图表对应不起来……

故此把xml和图纸同时配备的时候Activiti自动关联xml和图纸,当须要得到图片的时候平素回到布署时压缩包里面包车型地铁图形文件,而不是Activiti自动生成的图样文件

二.一.二 使用压缩包格局布署

Activiti协理布署*.bpmn20.xml、bar、zip格式的流程定义。

行使Activit Deisigner工具设计流程图的时候会有七个品种的文本:

  • .activiti设计工具使用的文书

  • .bpmn20.xml布署工具自动依照.activiti文件生成的xml文件

  • .png流程图图片

化解办法就是把xml文件和图片文件同时布置,因为在独立安顿xml文件的时候Activiti会自动生成一张流程图的图纸文件,不过如此在接纳的时候坐标和图片对应不起来……

因此把xml和图纸同时配备的时候Activiti自动关联xml和图表,当要求获得图片的时候平昔重返布置时压缩包里面包车型的士图纸文件,而不是Activiti自动生成的图形文件

❷ 申请提交系统后, 由风控举办审查

二.1.②.一 使用工具打包Bar文件

右键项目名称然后点击“Create deployment
artifacts”,会在src目录中开创deployment文件夹,里面含有*.bar文件.

贰.1.二.一 使用工具打包Bar文件

在“Package Explorer”视图中右键项目名称然后点击“Create deployment
artifacts”,会在src目录中开创deployment文本夹,里面富含*.bar文件.

❸ 运转单位举办修改操

二.一.二.二 使用Ant脚本打包Zip文件

这也是我们采取的不二等秘书籍,你能够手动接纳xml和png打包成zip格式的公文,也足以像大家同样使用ant
target的方法打包那七个文件。

<?xml version="1.0" encoding="UTF-8"?>
<project name="foo">

    <property name="workflow.definition" value="foo-common-core/src/main/resources/diagrams" />
    <property name="workflow.deployments" value="foo-common-core/src/main/resources/deployments" />

<target name="workflow.package.oa.leave">
        <echo>打包流程定义及流程图::OA-请假</echo>
        <zip destfile="${workflow.deployments}/oa/leave.zip" basedir="${workflow.definition}/oa/leave" update="true"
            includes="*.xml,*.png" />
    </target>
</project>

如此那般当修改流程定义文件后如果运转ant命令就可以打包了:

ant workflow.package.oa.leave

今后布局bar或然zip文件查看流程图图片就不是乱码了,而是你的压缩包里面包车型地铁png文件。

二.1.二.贰 使用Ant脚本打包Zip文件

那也是我们选用的主意,你能够手动选取xml和png打包成zip格式的文书,也能够像我们同样使用ant
target的措施打包那七个文本。

123456789101112
<?xml version="1.0" encoding="UTF-8"?><project name="foo">     <property name="workflow.definition" value="foo-common-core/src/main/resources/diagrams" />    <property name="workflow.deployments" value="foo-common-core/src/main/resources/deployments" /> <target name="workflow.package.oa.leave">     <echo>打包流程定义及流程图::OA-请假</echo>        <zip destfile="${workflow.deployments}/oa/leave.zip" basedir="${workflow.definition}/oa/leave" update="true"            includes="*.xml,*.png" /> </target></project>

view
rawbuild.xml hosted
with ❤ by GitHub

如此那般当修改流程定义文件后1旦运维ant命令就足以打包了:

ant workflow.package.oa.leave

未来布署bar大概zip文件查看流程图图片就不是乱码了,而是你的压缩包里面包车型大巴png文件。

二. 提前还款流程

二.二 使用引擎提供的Form依旧自定义业务Form

2.二 使用引擎提供的Form依旧自定义业务Form

倡议流程的机要缘由是用户愿意遵照合同实行提前还款. 流程关键步骤为:

2.二.壹 引擎提供的Form

概念表单的形式在各类Task标签中定义extensionElementsactiviti:formProperty即可,到达这么些节点的时候能够透过API读取表单元素。

Activiti官方的例证使用的正是在工艺流程定义中设置每二个节点展现怎么的表单哪些字段需求出示、哪些字段只读、哪些字段必填。

不过那种方法只有适用于相比简单的流水生产线,对于有个别复杂大概页面必要工作逻辑的判断的动静就不适用了。

对此数据的保存都以在内燃机的表中,不方便人民群众和别的表的涉嫌、对全部类其余筹划也不利于!

二.二.一 引擎提供的Form

概念表单的办法在各样Task标签中定义extensionElementsactiviti:formProperty即可,到达那几个节点的时候能够由此API读取表单成分。

Activiti官方的例证使用的正是在流水生产线定义中安装每叁个节点显示怎么的表单哪些字段供给显示、哪些字段只读、哪些字段必填。

可是那种方法唯有适用于比较简单的流程,对于有个别复杂也许页面需求工作逻辑的判定的状态就不适用了。

对此数据的保存都是在发动机的表中,不方便人民群众和其他表的涉嫌、对整个类别的宏图也不利于!

❶ 借款人联系客服职员, 提交报名

二.二.二 自定义业务Form

那种办法应该是大家用的最多的了,因为壹般的工作连串业务逻辑都会相比较复杂,而且数据库山西中国广播集团大表都会有依靠关系,表单中有广大气象判断。

诸如我们的种类适用jQuery
UI作为UI,有过多javascript代码,页面的许多操作需求独特处理(例如:四个选项的排挤、各种节点依照项目和操作人展现分裂的按钮);基本每种商行都有1套本身的UI风格,要保全四个系统的操作习惯壹致只可以利用自定义表单才能满意。

2.二.2 自定义业务Form

那种艺术应该是大家用的最多的了,因为1般的作业连串业务逻辑都会相比复杂,而且数据库中众多表都会有依靠关系,表单中有成都百货上千情状判断。

比如大家的体系适用jQuery
UI作为UI,有那几个javascript代码,页面包车型地铁浩大操作须要特殊处理(例如:四个挑选的排挤、每一种节点依据项目和操作人突显差异的按钮);基本每一个集团都有一套本人的UI风格,要保持三个系统的操作习惯1致只可以动用自定义表单才能满意。

❷ 运维生成提前还款表达书, 其包涵详细金额多少

2.3 业务和流程的涉及格局

本条难点在群里面很多个人都问过,这也是本人刚刚开端吸引的地点;

新生看了以下API发现Runtime瑟维斯有多少个法子:

2.三 业务和流程的关系方式

那些题材在群里面很两个人都问过,那也是自家刚刚初始吸引的地点;

新生看了以下API发现RuntimeService有四个法子:

❸ 借款人确认, 通过客服服务人士上传签字照片

2.3.1 startProcessInstanceByKey

javadoc对其认证:

startProcessInstanceByKey(String processDefinitionKey, Map variabes) 
          Starts a new process instance in the latest version of the process definition with the given key

 

其中businessKey便是工作ID,例如要提请请假,那么先填写登记音信,然后(保存+运行流程),因为请假是单身设计的数据表,所以保存后取得实体ID就能够把它传给processInstanceBusinessKey措施运维流程。当需求根据businessKey查询流程的时候就能够经过API查询:

runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(processInstanceBusinessKey, processDefinitionKey);

 

议数据库冗余设计:在业务表设计的时候添加一列:PROCESS_INSTANCE_ID varchar2(64),在流水生产线运营今后把流程ID更新到业务表中,那样不管从业务或许流程都足以查询到对方!

特别表达: 此方法运营时自动选取新型版本的流水线定义。

2.3.1 startProcessInstanceByKey

javadoc对其认证:

startProcessInstanceByKey(String processDefinitionKey, Map variables) 
          Starts a new process instance in the latest version of the process definition with the given key

其中businessKey即是业务ID,例如要申请请假,那么先填写登记新闻,然后(保存+运行流程),因为请假是独自设计的数据表,所以保存后拿走实体ID就足以把它传给processInstanceBusinessKey主意运维流程。当必要基于businessKey查询流程的时候就足以经过API查询:

?

1
runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(processInstanceBusinessKey,
processDefinitionKey)

建议数据库冗余设计:在业务表设计的时候添加1列:PROCESS_INSTANCE_ID
varchar2(64)
,在流程运营以往把流程ID更新到事情表中,那样不管从作业大概流程都能够查询到对方!

特意表达: 此方法运维时自动选拔新型版本的流程定义。

❹ 运行代扣还款金额, 结清借款

2.3.2 startProcessInstanceById

javadoc对其证实:

startProcessInstanceById(String processDefinitionId, String businessKey, Map variables) 
          Starts a new process instance in the exactly specified version of the process definition with the given id.

 

processDefinitionId:这一个参数的值能够透过repositoryService.createProcessDefinitionQuery()办法查询,对应数据库:ACT_RE_PROCDEF;每回陈设一次流程定义就会添加一条数据,同名的版本号添加。

专门表明: 此能够钦命差异版本的流程定义,让用户多壹层选用。

2.3.2 startProcessInstanceById

javadoc对其证实:

startProcessInstanceById(String processDefinitionId, String businessKey, Map variables) 
          Starts a new process instance in the exactly specified version of the process definition with the given id.

processDefinitionId:那几个参数的值可以透过repositoryService.createProcessDefinitionQuery()方式查询,对应数据库:ACT_RE_PROCDEF;每一次布署贰遍流程定义就会添加一条数据,同名的本子号加上。

尤其表达: 此能够钦赐分化版本的流水生产线定义,让用户多一层选拔。

❺ 生成还款结清注脚

二.三.三 怎么着采纳

建议选取startProcessInstanceByKey,特殊意况需求动用过去的本子选取接纳startProcessInstanceById

二.3.3 怎样选用

提议使用startProcessInstanceByKey,特殊情形必要动用过去的本子选取选择startProcessInstanceById

在凉台的莫过于运转中, 有各个各种的事体供给处理, 包含借款人, 出借人,
资金等等, 同时还论及到各种差异的业务部门,
而且流程的漂流操作职员和机构也趁机集团业务的升华而分歧的调整.
设计五个基础的流程框架和达成基础代码, 形成简单的支付形式是该系统的重点.
因而整个类别的宏图涉及到以下重点几个方面:

二.四 同步用户数据

那一个难点也是相比较多的人理解过,Activiti扶助对职分分配到:钦命人、钦定组、两者结合,而这个人和组的新闻都保存在ACT_ID..表中,有温馨的用户和组(剧中人物)管理让不少人心惊肉跳了;原因是因为每一种系统都会设有五个权力管理模块(维护:用户、部门、剧中人物、授权),不知道该怎么和Activiti同步。

二.四 同步用户数量

其一标题也是相比较多的人询问过,Activiti支持对职分分配到:钦命人、内定组、两者结合,而这个人和组的消息都保存在ACT_ID..表中,有友好的用户和组(剧中人物)管理让无数人仓惶了;原因是因为各样系统都会存在3个权力管理模块(维护:用户、部门、剧中人物、授权),不明了该怎么和Activiti同步。

☞ 选取适当的办事流引擎

二.肆.一 提出处理方式

Activiti有一个IdentityService接口,通过那几个接口可以操控Activiti的ACT_ID_*表的数码,一般的做法是用工作连串的权力管理模块维护用户数量,当实行CRUD操作的时候在本来业务逻辑后边添加同步到Activiti的代码;例如添加二个用户时同步Activiti
User的代码片段:

/**
 * 保存用户信息 并且同步用户信息到activiti的identity.User,同时设置角色
 * @param user
 * @param roleIds
 */
public void saveUser(User user, List<Long> roleIds, boolean synToActiviti) {
    accountManager.saveEntity(user);
    String userId = user.getId().toString();

    if (synToActiviti) {
        List<org.activiti.engine.identity.User> activitiUsers = identityService.createUserQuery().userId(userId).list();
        if (activitiUsers.size() == 1) {
            //更新信息
            org.activiti.engine.identity.User activitiUser = activitiUsers.get(0);
            activitiUser.setFirstName(user.getName());
            activitiUser.setLastName("");
            activitiUser.setPassword(user.getPassword());
            activitiUser.setEmail(user.getEmail());
            identityService.saveUser(activitiUser);

            // 删除用户的membership
            List<Group> activitiGroups = identityService.createGroupQuery().groupMember(userId).list();
            for (Group group : activitiGroups) {
                identityService.deleteMembership(userId, group.getId());
            }

            // 添加membership
            for (Long roleId : roleIds) {
                Role role = roleManager.getEntity(roleId);
                identityService.createMembership(userId, role.getEnName());
            }

        } else {
            org.activiti.engine.identity.User newUser = identityService.newUser(userId);
            newUser.setFirstName(user.getName());
            newUser.setLastName("");
            newUser.setPassword(user.getPassword());
            newUser.setEmail(user.getEmail());
            identityService.saveUser(newUser);

            // 添加membership
            for (Long roleId : roleIds) {
                Role role = roleManager.getEntity(roleId);
                identityService.createMembership(userId, role.getEnName());
            }
        }
    }

}

 

删去操作也和这一个类似!

甭管从作业连串有限支撑用户仍旧从Activiti维护,肯定要规定壹方,然后CRUD的时候一起到对方,即使急需一块三个子系统那么能够再调用WebService达成。

2.4.一 建议处理情势

Activiti有一个IdentityService接口,通过这几个接口能够操控Activiti的ACT_ID_*表的数额,一般的做法是用工作系统的权限管理模块维护用户数量,当实行CRUD操作的时候在原本业务逻辑后边添加同步到Activiti的代码;例如添加一个用户时同步Activiti
User的代码片段:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
/** * 保存用户信息 并且同步用户信息到activiti的identity.User,同时设置角色 * @param user * @param roleIds */public void saveUser(User user, List<Long> roleIds, boolean synToActiviti) { accountManager.saveEntity(user); String userId = user.getId().toString();   if (synToActiviti) {      List<org.activiti.engine.identity.User> activitiUsers = identityService.createUserQuery().userId(userId).list();       if (activitiUsers.size() == 1) {          //更新信息         org.activiti.engine.identity.User activitiUser = activitiUsers.get(0);          activitiUser.setFirstName(user.getName());           activitiUser.setLastName("");          activitiUser.setPassword(user.getPassword());            activitiUser.setEmail(user.getEmail());          identityService.saveUser(activitiUser);             // 删除用户的membership          List<Group> activitiGroups = identityService.createGroupQuery().groupMember(userId).list();            for (Group group : activitiGroups) {                identityService.deleteMembership(userId, group.getId());          }            // 添加membership          for (Long roleId : roleIds) {               Role role = roleManager.getEntity(roleId);                identityService.createMembership(userId, role.getEnName());           }        } else {         org.activiti.engine.identity.User newUser = identityService.newUser(userId);          newUser.setFirstName(user.getName());            newUser.setLastName("");           newUser.setPassword(user.getPassword());         newUser.setEmail(user.getEmail());           identityService.saveUser(newUser);          // 添加membership          for (Long roleId : roleIds) {               Role role = roleManager.getEntity(roleId);                identityService.createMembership(userId, role.getEnName());           }        }    } }

view
rawAccountServiceImpl.java hosted
with ❤ by GitHub

剔除操作也和这么些近乎!

无论从事情体系保险用户依旧从Activiti维护,肯定要分明一方,然后CRUD的时候1起到对方,假如需求联合七个子系统那么能够再调用WebService实现。

对于三个类似涉及到审查批准以及实践实际业务的连串, 基于简单的景观控制的宏图,
也许机关开发类工作流引擎轮子的做法都以不合适.
所以2个开源并且被大规模运用的劳作流引擎是四个不错而且必须的选取. Activiti
工作流引擎由于其轻量级, 易用性等优点如今在产业界被广大使用.
其工作流的状态机和外部系统的连天只供给通过一个ID实行关联即可,
即activiti的business key. (如下图)

二.伍 流程图设计工具用什么样

Activiti提供了七个流程设计工具,不过面向对象不一样。

  • Activiti
    Modeler,面向业务人员,使用开源的BPMN设计工具Signavio,使用BPMN描述业务流程图

  • Eclipse
    Designer,面向开发职员,Eclipse的插件,能够让开发职员定制各样节点的性质(ID、Name、Listener、Attr等)

贰.5 流程图设计工具用什么

Activiti提供了八个流程设计工具,可是面向对象区别。

  • Activiti
    Modeler,面向业务职员,使用开源的BPMN设计工具Signavio,使用BPMN描述业务流程图

  • Eclipse
    Designer,面向开发职员,Eclipse的插件,能够让开发职员定制每种节点的品质(ID、Name、Listener、Attr等)

图片 5

二.伍.一 我们的方法

也许你会惊奇,因为大家从没选择Activiti
Modeler,大家认为用Viso已经能发布流程图的意味了,而且项目CEO也是技巧出身,和开发职员也便于调换。

现阶段这些连串是首先个使用Activiti的,初始大家在须要调查钻探阶段采取Viso设计流程图,利用泳道流程图统一筹划和客户联系,分明后由负责流程的开发人士用Eclipse
Designer设计赢得bpmn20.xml,最终安插。

2.5.1 大家的艺术

唯恐您会好奇,因为大家尚无动用Activiti
Modeler,大家觉得用Viso已经能发挥流程图的意思了,而且项目高管也是技术出身,和开发职员也易于沟通。

近来这么些类型是率先个应用Activiti的,开头大家在供给调查探究阶段选拔Viso设计流程图,利用泳道流程图统一筹划和客户关系,鲜明后由负责流程的开发人士用Eclipse
Designer设计赢得bpmn20.xml,最后布署。

☞设计通用的最底层数据来援救差异的工作

二.陆 Eclipse Designer存在的标题

本条插件有二个很看不惯的Bug一贯未修复,安装了插件后Eclipse的复制和粘帖急速键会被转换为(Ctrl+Insert、Shift+Insert);Bug描述请见:

  • Activit
    Forums中告诉的Bug

  • Jira的登记

之所以最终大家只可以单独开多少个装置了Eclipse
Designer的Eclipse专门用来布置流程图,那样就不影响健康使用Eclipse
JAVAEE了。

2.陆 Eclipse Designer存在的标题

以此插件有1个很看不惯的Bug平昔未修复,安装了插件后Eclipse的复制和粘帖连忙键会被更换为(Ctrl+Insert、Shift+Insert);Bug描述请见:

  • Activit
    Forums中告诉的Bug

  • Jira的登记

因此最终我们只能单独开三个装置了Eclipse
Designer的Eclipse专门用来设计流程图,这样就不影响寻常使用Eclipse
JAVAEE了。

相关文章