You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助Java库生成含起止事件与用户任务的BPMN图?

可用于生成BPMN流程图的Java库推荐

下面是几个成熟的Java库,能帮你快速构建包含开始/结束事件、用户任务的基础BPMN流程图,支持生成标准BPMN XML,部分还能直接导出可视化图形:

1. Camunda BPM Model API

Camunda是目前最流行的BPMN 2.0实现之一,它的Model API专门用于程序化创建、修改BPMN模型,完全符合BPMN 2.0规范。你可以用它定义流程的各个节点(开始事件、用户任务、结束事件等),然后导出为标准的.bpmn XML文件,后续可以用Camunda Modeler等工具打开查看可视化图形,也可以通过Camunda的Diagram Generator直接生成SVG/PNG。

基础使用示例:

import org.camunda.bpm.model.bpmn.Bpmn;
import org.camunda.bpm.model.bpmn.BpmnModelInstance;
import org.camunda.bpm.model.bpmn.instance.*;

import java.io.FileOutputStream;
import java.io.IOException;

public class BpmnGenerator {
    public static void main(String[] args) throws IOException {
        // 创建空的BPMN模型实例
        BpmnModelInstance modelInstance = Bpmn.createEmptyModel();
        Definitions definitions = modelInstance.newInstance(Definitions.class);
        definitions.setTargetNamespace("http://your.company/bpmn");
        modelInstance.setDefinitions(definitions);

        // 创建流程
        Process process = modelInstance.newInstance(Process.class);
        process.setId("sample-process");
        definitions.addChildElement(process);

        // 开始事件
        StartEvent startEvent = modelInstance.newInstance(StartEvent.class);
        startEvent.setId("start");
        process.addChildElement(startEvent);

        // 用户任务1
        UserTask userTask1 = modelInstance.newInstance(UserTask.class);
        userTask1.setId("user-task-1");
        userTask1.setName("填写申请");
        process.addChildElement(userTask1);

        // 用户任务2
        UserTask userTask2 = modelInstance.newInstance(UserTask.class);
        userTask2.setId("user-task-2");
        userTask2.setName("审核申请");
        process.addChildElement(userTask2);

        // 结束事件
        EndEvent endEvent = modelInstance.newInstance(EndEvent.class);
        endEvent.setId("end");
        process.addChildElement(endEvent);

        // 连接节点
        Bpmn.addSequenceFlow(startEvent, userTask1);
        Bpmn.addSequenceFlow(userTask1, userTask2);
        Bpmn.addSequenceFlow(userTask2, endEvent);

        // 导出为BPMN XML文件
        FileOutputStream outputStream = new FileOutputStream("sample-process.bpmn");
        Bpmn.writeModelToStream(outputStream, modelInstance);
        outputStream.close();
    }
}

依赖(Maven):

<dependency>
    <groupId>org.camunda.bpm.model</groupId>
    <artifactId>camunda-bpm-model</artifactId>
    <version>7.21.0</version>
</dependency>

2. Activiti Model API

Activiti是另一个老牌的BPMN引擎,它的Model API同样支持程序化构建BPMN模型,功能和Camunda类似,生成的XML也符合BPMN 2.0规范,适合已经在使用Activiti生态的项目。

基础使用示例:

import org.activiti.bpmn.model.*;
import org.activiti.bpmn.converter.BpmnXMLConverter;

import java.io.FileOutputStream;
import java.io.IOException;

public class ActivitiBpmnGenerator {
    public static void main(String[] args) throws IOException {
        BpmnModel bpmnModel = new BpmnModel();
        Process process = new Process();
        process.setId("sample-process");
        bpmnModel.addProcess(process);

        // 开始事件
        StartEvent startEvent = new StartEvent();
        startEvent.setId("start");
        process.addFlowElement(startEvent);

        // 用户任务1
        UserTask userTask1 = new UserTask();
        userTask1.setId("user-task-1");
        userTask1.setName("提交申请");
        process.addFlowElement(userTask1);

        // 用户任务2
        UserTask userTask2 = new UserTask();
        userTask2.setId("user-task-2");
        userTask2.setName("审批申请");
        process.addFlowElement(userTask2);

        // 结束事件
        EndEvent endEvent = new EndEvent();
        endEvent.setId("end");
        process.addFlowElement(endEvent);

        // 连接节点
        process.addFlowElement(new SequenceFlow("start", "user-task-1"));
        process.addFlowElement(new SequenceFlow("user-task-1", "user-task-2"));
        process.addFlowElement(new SequenceFlow("user-task-2", "end"));

        // 导出XML
        BpmnXMLConverter converter = new BpmnXMLConverter();
        byte[] xmlBytes = converter.convertToXML(bpmnModel);
        FileOutputStream outputStream = new FileOutputStream("activiti-sample.bpmn");
        outputStream.write(xmlBytes);
        outputStream.close();
    }
}

依赖(Maven):

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-bpmn-model</artifactId>
    <version>7.1.0.M6</version>
</dependency>
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-bpmn-converter</artifactId>
    <version>7.1.0.M6</version>
</dependency>

3. 生成可视化图形的补充方案

如果需要直接在Java代码中生成流程图图片(SVG/PNG),可以配合以下工具:

  • Camunda Diagram Generator:基于Camunda Model API,能直接将BPMN模型实例渲染为SVG,依赖org.camunda.bpm:camunda-engine即可调用相关方法。
  • Apache Batik:可以将生成的SVG转换为PNG等位图格式,适合需要输出图片文件的场景。

内容的提问来源于stack exchange,提问作者codeforHarman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:00:50