当前位置: 首页 > news >正文

低代码开源项目Joget的研究——安装部署

大纲

  • 环境准备
    • 安装必要软件
    • 配置Java
      • 配置JAVA_HOME
      • 配置Java软链
      • 安装三方库
  • 获取源码
  • 配置MySql数据库
    • 创建用户
    • 创建数据库
    • 导入初始数据
  • 配置数据库连接
  • 配置sessionFactory
  • 编译
  • 下载tomcat
  • 启动
    • 下载aspectjweaver
    • 移动jw.war文件
    • 编写脚本
    • 运行
  • 测试
  • 参考资料

Joget,作为一款开源的低代码/无代码平台,为企业和开发者提供了一个强大且灵活的解决方案,用于快速构建和部署业务流程应用、表单应用以及工作流管理系统。该平台以其用户友好的界面和丰富的功能集,极大地简化了应用开发的复杂性,使得非技术人员也能轻松参与创建和管理业务流程。
Joget的核心优势之一是其高度的可定制性。用户可以通过拖放式的界面设计工具,快速搭建出符合自己业务需求的表单和仪表盘。同时,其强大的工作流引擎支持复杂的业务逻辑和审批流程,确保企业业务的高效运转。
此外,Joget还提供了丰富的插件扩展功能,用户可以根据自己的需求,轻松集成第三方系统或服务,进一步扩展平台的功能和应用场景。平台还支持多种部署方式,包括本地部署和云端部署,满足不同企业的IT架构和安全性需求。

本文我们将介绍Joget社区版的编译部署。

环境准备

安装必要软件

# 更新系统包
sudo apt-get update# 安装Java
sudo apt-get install openjdk-8-jdk# 安装MySQL
sudo apt-get install mysql-server# Install Apache Maven 2.2.1 or above
sudo apt-get install maven# Install Git
sudo apt-get install git# 安装unzip
sudo apt-get install unzip

配置Java

配置JAVA_HOME

sudo vim /etc/environment

在上述文件中,新增如下内容

JAVA_HOME=“/usr/lib/jvm/java-8-openjdk-amd64”

重新加载环境,并检验环境

source /etc/environment
echo $JAVA_HOME

配置Java软链

sudo mv /usr/bin/java /usr/bin/java_bak
sudo ln -s /usr/lib/jvm/java-8-openjdk-amd64/bin/java /usr/bin/java

检测java版本

java -version

openjdk version “1.8.0_432”
OpenJDK Runtime Environment (build 1.8.0_432-8u432-gaus1-0ubuntu224.04-ga)
OpenJDK 64-Bit Server VM (build 25.432-bga, mixed mode)

安装三方库

wget https://dev.joget.org/community/download/attachments/19104566/install-libraries.zip
unzip -a install-libraries.zip
cd install-libraries
./install_linux.sh
cd ~

获取源码

mkdir joget_src
cd joget_src
git clone https://github.com/jogetworkflow/jw-community.git --branch 7.0-SNAPSHOT --depth 1
cd ~

配置MySql数据库

创建用户

  1. 使用sudo登录MySql
sudo mysql
  1. 设置root用户密码
    在MySQL命令行中,执行以下命令来设置root用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd123';
FLUSH PRIVILEGES;
  1. 退出MySql
EXIT;
  1. 使用新密码登录MySql
mysql -u root -p

创建数据库

仍然以root用户登录MySql

CREATE DATABASE jwdb;
EXIT;

导入初始数据

mysql -uroot jwdb < joget_src/jw-community/wflow-install/src/main/resources/data/jwdb-empty.sql -p

输入之前创建的root密码(pwd123)

配置数据库连接

在根目录下下载配置文件包

cd ~
wget http://dev.joget.org/community/download/attachments/19104566/wflow.zip
unzip -a wflow.zip

修改数据库连接配置

cd wflow
sodu vim app_datasource-default.properties

由于我们之前给mysql的root用户设置的了密码pwd123,于是要将此更新到该文件中

#
#Thu Apr 16 17:47:42 MYT 2015
workflowDriver=com.mysql.jdbc.Driver
workflowUrl=jdbc\:mysql\://localhost\:3306/jwdb?characterEncoding\=UTF-8
workflowUser=root
profileName=
workflowPassword=pwd123

配置sessionFactory

wflow-commons/src/main/resources/commonsApplicationContext.xml文件的<property name="hibernateProperties">的下插入<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
如下图:
在这里插入图片描述

编译

cd ~/joget_src/jw-community/wflow-app/
mvn clean install

下载tomcat

cd ~# 从 Apache Tomcat 官方网站下载最新的 Tomcat 9 二进制发行版
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tomcat-9.0.98.tar.gz# 解压缩下载的文件
tar xzf apache-tomcat-9.0.98.tar.gz

启动

下载aspectjweaver

aspectjweaver 是 AspectJ 的一个组件,AspectJ 是一个面向方面编程(AOP)的扩展,它用于在 Java 应用程序中实现横切关注点(如日志记录、事务管理、安全性等)。aspectjweaver 是 AspectJ 的织入器,它可以在编译时、类加载时或运行时将切面代码织入到目标代码中。

cd ~/wflow/
wget https://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.8.5/aspectjweaver-1.8.5.jar .
cd ~

移动jw.war文件

将jw.war拷贝到对应目录下

# 复制 WAR 文件到 Tomcat 的 webapps 目录
cp ~/joget_src/jw-community/wflow-consoleweb/target/jw.war ~/apache-tomcat-9.0.98/webapps/

编写脚本

编写运行脚本

vim tomcat9-run.sh

填入以下内容

#!/bin/shexport CATALINA_PID="$HOME/apache-tomcat-9.0.98/temp/tomcat.pid"
mkdir -p "$HOME/apache-tomcat-9.0.98/temp"
export JAVA_OPTS="-XX:MaxPermSize=128m -Xmx768M -Dwflow.home=./wflow/ -javaagent:./wflow/aspectjweaver-1.8.5.jar"apache-tomcat-9.0.98/bin/catalina.sh $*

运行

sh tomcat9-run.sh start

测试

使用下面命令查看服务所在机器的ip

ip addr show

在这里插入图片描述
使用该IP的8080端口访问该服务(http://172.22.26.83:8080/jw)
在这里插入图片描述

参考资料

  • https://dev.joget.org/community/display/DX7/Build+Source+Code+on+Linux
  • https://www.joget.org/product/features/

相关文章:

低代码开源项目Joget的研究——安装部署

大纲 环境准备安装必要软件配置Java配置JAVA_HOME配置Java软链安装三方库 获取源码配置MySql数据库创建用户创建数据库导入初始数据 配置数据库连接配置sessionFactory编译下载tomcat启动下载aspectjweaver移动jw.war文件编写脚本运行 测试参考资料 Joget&#xff0c;作为一款开…...

《鸿蒙开发-答案之书》字符串占位符格式化

《鸿蒙开发-答案之书》字符串占位符格式化 先在string.json定义&#xff1a; {"name":"message_arrive","value":"We will arrive at %s."}使用&#xff0c;它有两种使用方式&#xff1a; 方式一&#xff1a; Text($r(app.string.…...

workman服务端开发模式-应用开发-gateway长链接端工作原理

一、长链接的工作原理 Register类其实也是基于基础的Worker开发的。Gateway进程和BusinessWorker进程启动后分别向Register进程注册自己的通讯地址&#xff0c;Gateway进程和BusinessWorker通过Register进程得到通讯地址后&#xff0c;就可以建立起连接并通讯了。而Gateway进程…...

Android 关于Tencent vConsole 添加入webView 总结

官方地址&#xff1a; https://github.com/Tencent/vConsole/blob/dev/doc/tutorial_CN.md 上面文档中提供了两种常见的引入H5工程思路&#xff0c;简单易懂&#xff01; 今天这篇文章要说明的是&#xff0c;不同于官方文档的接入方式。 先说背景&#xff1a;H5工程方&…...

【路径规划】原理及实现

路径规划&#xff08;Path Planning&#xff09;是指在给定地图、起始点和目标点的情况下&#xff0c;确定应该采取的最佳路径。常见的路径规划算法包括A* 算法、Dijkstra 算法、RRT&#xff08;Rapidly-exploring Random Tree&#xff09;等。 目录 一.A* 1.算法原理 2.实…...

【AIGC】ChatGPT 结构化 Prompt 的高级应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;标识符的使用&#xff08;Use of Identifiers&#xff09;1. #2. <>3. - 或 4. [] &#x1f4af;属性词的重要性和应用应用场景 &#x1f4af;具体模块…...

Go web 开发框架 Iris

背景 掌握了 Go 语言的基础后就该开始实践了&#xff0c;编写Web应用首先需要一个 web 开发框架。做框架选型时&#xff0c;处理web请求是基本功能&#xff0c;至于MVC是更进一步需要。现在比较流行的web架构是前后端分离&#xff0c;后端响应RESTful的请求&#xff0c;Iris 能…...

uniapp Native.js 调用安卓arr原生service

最近搞了个uni小项目&#xff0c;一个定制的小平板&#xff0c;带一个nfc设备&#xff0c;厂家只给了一套安卓原生demo&#xff0c;头一次玩原生安卓&#xff0c;废了好半天劲打出来arr包&#xff0c;想镶进uniapp里&#xff0c;网上查了好久&#xff0c;都是错的&#xff0c;要…...

C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容

我们有一个中文录音文件.mp3格式或者是.wav格式&#xff0c;如果我们想要提取录音文件中的文字内容&#xff0c;我们可以采用以下方法&#xff0c;不需要使用Azure Speech API 密钥注册通过离线的方式实现。 1.首先我们先在NuGet中下载两个包 NAudio 2.2.1、Whisper.net 1.7.3…...

【一文了解】C#重点-委托1

本篇文章来学习一下C#的委托&#xff0c;委托是C#中的一个重要概念&#xff0c;它允许将方法作为参数传递给其他方法。C#中的委托类似于C或C中的函数指针&#xff0c;并且类型安全。 委托 1.委托的定义 委托&#xff08;delegate&#xff09;是方法的代理/代表&#xff0c;委托…...

WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)

文章目录 1、引言2、案例效果3、案例实现1、依赖安装2、文件创建3、代码实现1、依赖引用与上下文2、个性化视觉效果:自定义 ItemContainerStyle3、页面样式与布局完整代码4、ViewModel 逻辑实现5、子界面代码:3、实现效果4、源代码获取5、总结1、引言 在WPF应用程序开发中,…...

新版Android Studio 2024.1.2版本,如何通过无线wifi连接手机实现交互

1、首先&#xff0c;先确定手机是否启动了开发者选项 在我的设备 -> 全部参数 -> MIUI版本点击6下 &#xff08;有的手机是 关于手机 -> 查看手机版本 &#xff09; 2、在设置中搜索 开启开发者选项 3、进入开发者选项后&#xff0c;在 调试 中选择 无线调试并选择…...

VTK知识学习(26)- 图像基本操作(一)

1、前言 图像处理离不开一些基本的图像数据操作&#xff0c;例如获取和修改图像的基本信息、访问和修改图像像素值、图像显示、图像类型转换等。熟练掌握这些基本操作有助于使用 VTK进行图像处理应用程序的快速开发。 2、图像信息的访问与修改 1&#xff09;利用vtkIamgeData…...

2024年9月AI头条新闻:创新与挑战并存

2024年9月AI头条新闻&#xff1a;创新与挑战并存 9月&#xff0c;人工智能领域继续高速发展&#xff0c;重大产品发布、伦理争议和技术突破交织在一起。让我们回顾一下本月最重要的AI新闻&#xff1a; OpenAI的o1&#xff1a;更强大的语言模型 OpenAI推出了o1&#xff0c;一个…...

[Xshell] Xshell的下载安装使用、连接linux、 上传文件到linux系统-详解(附下载链接)

前言 xshell 链接&#xff1a;https://pan.quark.cn/s/57062561e81a 提取码&#xff1a;TK4K 链接失效&#xff08;可能被官方和谐&#xff09;可评论或私信我重发 安装 下载后解压得到文件 安装路径不要有中文 打开文件 注意&#xff01;360等软件会拦截创建注册表的行为&a…...

count(1)、count(_)与count(列名)的区别?

大家好&#xff0c;我是锋哥。今天分享关于【count(1)、count(_)与count(列名)的区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; count(1)、count(_)与count(列名)的区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 SQL 中&#xff0c…...

代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

贪心没有套路&#xff0c;说白了就是常识性推导加上举反例 今天的内容比较简单 简单了解贪心是通过局部最优解反推全局最优解&#xff08;有经验成分&#xff09; 455.分发饼干 题目链接&#xff1a;455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 讲解链接&#xff…...

List直接使用removeAll报错

List直接使用removeAll报错 需要先将list转换才能使用 原因是&#xff1a; removeAll 方法在 Java 中用于从当前列表中删除另一个列表中存在的所有元素。如果直接对 List 接口的一个实现使用 removeAll 方法抛出异常&#xff0c;可能的原因有&#xff1a; 不同的List实现&am…...

Debian环境安装Docker Engine

Debian环境安装Docker Engine 卸载旧版本使用APT工具安装Docker设置存储库安装Docker设置权限 docker compose命令卸载Docker 卸载旧版本 要卸载的非官方软件包是&#xff1a; docker.iodocker-composedocker-docpodman-docker 此外&#xff0c;Docker Engine 依赖 containe…...

Python常用内置函数总结

目录 1. abs() 2. complex() 3. divmod() 4. eval() 5. float() 6. hash() 7. input() 8. int() 9. len() 10. list() 11. oct() 12. open() 13. pow() 14. print() 15. range() 16. reversed() 17. round() 18. sorted()…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...