# gress **Repository Path**: XYJXUST/gress ## Basic Information - **Project Name**: gress - **Description**: Gress 是一个现代化的企业级插件系统平台:宿主应用(gress-web + gress-fronted)提供统一的插件运行时与扩展机制,业务以**插件包(JAR + 前端 UMD)**形式安装、启动与卸载,无需改动宿主核心代码。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-26 - **Last Updated**: 2026-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Gress - 企业级微内核插件系统平台
![Gress Logo](docs/images/logo.png) [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) [![Java](https://img.shields.io/badge/Java-21-orange.svg)](https://openjdk.org/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.2.0-brightgreen.svg)](https://spring.io/projects/spring-boot) [![Vue](https://img.shields.io/badge/Vue-3.4-4FC08D.svg)](https://vuejs.org/) [![PF4J](https://img.shields.io/badge/PF4J-3.13.0-blue.svg)](https://pf4j.org/) **基于 PF4J 包加载 + Gress 扩展生命周期的企业级插件系统平台** [English](README_EN.md) | 简体中文 [在线演示](#-在线演示) • [界面示例](#-界面示例) • [快速开始](#-快速开始) • [文档](#-文档) • [插件开发](#-插件开发) • [贡献](#-贡献)
--- ## 🌐 在线演示 | 项目 | 说明 | |------|----------------------------------------------------| | **地址** | [http://gress.keqi.life/](http://gress.keqi.life/) | | **默认账号** | `test` | | **默认密码** | `36mpbEW18fX0` | 演示环境为已部署的宿主实例,可直接体验插件安装、应用切换与业务插件能力(具体已装插件以线上为准)。 --- ## 📷 界面示例 以下截图来自线上演示环境 [http://gress.keqi.life/](http://gress.keqi.life/)(`test` / `36mpbEW18fX0`),展示宿主与典型插件的管理界面。 ### 应用管理(宿主) 集中查看已安装插件包:版本、运行状态、配置/重启等运维操作。 ![应用管理 - 我的应用](docs/images/demo/app-management.png) ### 插件面板注入(devpanel 示例) 除路由、菜单外,插件可在前端 `PluginManifest.extensions.panels` 中声明**可停靠面板**,由宿主 `PanelManager` 统一挂载到布局的 **底部**、**右侧**、**左侧** 或 **模态** 区域;用户通过边缘触发条打开/切换,不占用主内容路由区域。 | 挂载位置 | `position` | 典型用途 | |----------|------------|----------| | 底部 | `bottom` | 日志流、终端、调试输出(如「服务日志」) | | 右侧 | `right` | 辅助工具、测试面板、上下文信息(可注册多个面板,右侧图标切换) | | 左侧 | `left` | 导航辅助、筛选器等 | | 模态 | `modal` | 临时弹层类面板 | 参考实现见 [`gress-plugin-devpanel`](../gress-plugin-devpanel) 前端工厂中的 `extensions.panels`(`ServerLogPanel` → `bottom`,`RightTestPanel` → `right`)。 **底部面板**:在应用管理页底部展开「服务日志」,实时查看宿主/插件输出(SSE)。 ![插件面板 - 底部注入(服务日志)](docs/images/demo/plugin-panel-bottom.png) **右侧面板**:右侧边缘显示面板入口图标,点击后滑出插件注入的测试面板(多面板时可在右侧切换)。 ![插件面板 - 右侧注入](docs/images/demo/plugin-panel-right.png) 插件侧声明示例: ```typescript extensions: { panels: [ { id: 'server-log', title: '服务日志', component: ServerLogPanel, position: 'bottom', // bottom | right | left | modal icon: 'Terminal', defaultOpen: false, order: 10 }, { id: 'right-test', title: '右侧测试', component: RightTestPanel, position: 'right', icon: 'FlaskOutline', order: 20 } ] } ``` 安装 devpanel 等声明了 `plugin.ui.hasPanel: true` 的插件后,在宿主布局中即可使用上述面板能力。详见 [`gress-fronted/src/services/PanelManager.ts`](gress-fronted/src/services/PanelManager.ts)。 ### 应用配置(宿主) 单插件运维配置:路由、会话(并发登录、存储、超时、同端策略等)、安全(超级管理员)等,保存后由宿主与插件协同生效。 ![应用配置](docs/images/demo/app-config.png) ### 应用详情 · 操作日志(宿主) 查看插件安装/升级/重启等运维记录:操作人、耗时、结果与说明,便于审计与排障。 ![应用详情 - 操作日志](docs/images/demo/app-operation-log.png) ### 宿主 · 界面配置 全局外观与侧栏:浅色/深色主题、经典侧栏 / OA 顶栏布局、侧栏快捷应用数量等。 ![宿主 - 界面配置](docs/images/demo/ui-settings.png) ### IAM · 认证配置(iam 插件) 注册/登录策略:按渠道(互联网注册、邀请、管理员创建等)配置自助注册与多种登录方式。 ![IAM - 注册/登录策略](docs/images/demo/auth-login-policy.png) ### IAM · MFA 策略 全局 MFA:强制模式、已绑定用户登录是否需 MFA、Step-up 有效期等。 ![IAM - MFA 策略](docs/images/demo/auth-mfa-policy.png) ### IAM · 权限管理 按角色为应用分配权限树,支持保存变更与权限反查。 ![IAM - 权限管理](docs/images/demo/permission-management.png) ### 配置中心 · 维护公告(config-center 插件) 维护模式开关、公告文案、时间窗、访问白名单及登录/匿名访问限制等。 ![配置中心 - 维护公告](docs/images/demo/maintenance-announcement.png) --- ## 📖 简介 Gress 是一个现代化的**企业级插件系统平台**:宿主应用(`gress-web` + `gress-fronted`)提供统一的插件运行时与扩展机制,业务以**插件包(JAR + 前端 UMD)**形式安装、启动与卸载,无需改动宿主核心代码。 典型场景包括:IAM、应用商店等**应用插件**,可插拔的**中间件**,以及可选的**触发器/任务节点**(用于工作流编排类扩展,而非平台本体定位)。 ### ✨ 核心特性 #### 🔌 插件包与扩展体系 - **四类插件类型**:`APPLICATION`(应用)、`TRIGGER`(触发器)、`TASK`(任务节点)、`MIDDLEWARE`(中间件) - **PF4J 负责 JAR 加载**:`DefaultPluginManager` + `Pf4jPackageAdapter` 管理类加载与启停 - **Gress 负责编排**:`PluginPackageLifecycleManager` + `PluginExtensionManager` 驱动安装/启动/停止/卸载及扩展链 - **包级清单 `plugin.yml`**:定义插件 id、入口类、依赖、UI、配置、治理信息;构建期生成 `plugin.properties` - **扩展点 `@PluginSpec`**:标注 PF4J 扩展类(工作流节点、前端 `jsPath` 等),由 `PluginSpecScannerExtension` 扫描入 `PluginRepository` #### 🧩 插件内 DI(非嵌套 Spring Boot) - 每个插件包拥有独立 **`PluginContainer`**(`gress-core` 自定义 DI) - 支持 `@Service`、`@Inject`、`@ConfigurationProperties`、`@Value` 等(语义类似 Spring,运行在插件 ClassLoader 内) - 配置来自 **`PluginEnvironment`**:`plugin.yml` 的 `config` 段 + 数据库覆盖(`PluginConfigLoader` / `PluginConfigLoaderExtension`) #### 🎨 前端插件运行时 - **生产环境**:加载插件构建产物 **IIFE/UMD**(`window.__GRESS_PLUGIN__`),工厂函数 `createPlugin(bridge, properties) → PluginManifest` - **开发环境**:Vite 动态 `import()` + `plugin-dev-server` 热更新 - **`GressBridge`**:HTTP、路由、Pinia、权限、UI 插槽等宿主能力(`@keqi.gress/plugin-bridge`) - **`extensions.panels`**:插件可向宿主布局注入底部/右侧等可停靠面板(`PanelManager`),见 [界面示例 · 插件面板注入](#插件面板注入devpanel-示例) - 生命周期词汇为 **`activate` / `deactivate` / `uninstall`**(仅前端 manifest,与后端 PF4J 阶段不同) #### 🚀 可选能力:工作流编排扩展 - 平台核心是**插件加载、生命周期、配置与 UI 扩展**;工作流是宿主上的一类可选场景 - `TRIGGER` / `TASK` 插件类型、Vue Flow 设计器、`TriggerLifecycleManager`、`WorkflowExecutor` 等 - 使用工作流能力时,SSE 可推送执行状态与日志 #### 🏢 企业级能力 - 多租户、RBAC、应用商店(独立插件仓库 `gress-plugin-appstore` 等) - 插件 Flyway 迁移(`DatabaseMigrationExtension`) - 可选 Redis 分布式锁、RocketMQ、文件存储(x-file-storage) --- ## 🏗️ 架构设计 ### 模块与仓库布局 ``` Maven 反应堆(根 pom.xml) ├── gress-common # 公共类型、@PluginSpec、PluginType、触发器/任务接口 ├── gress-core # 插件生命周期、PF4J 适配、PluginContainer、工作流、启动编排 ├── gress-plugin-api # PluginLifecycleHook、管理 API 等插件侧契约 ├── gress-bootstrap # 首次安装向导(中间件配置、overlay 配置) ├── gress-plugin-build # 插件工程构建工具 ├── gress-plugin-parent # 外部插件 Maven 父 POM └── gress-web # Spring Boot 宿主(API、SSE、安全、静态资源) 仓库内非 Maven 模块 ├── gress-fronted/ # Vue 3 宿主前端(构建后由 gress-web 打入静态资源) └── gress-plugin-packages/# 共享 npm 包:plugin-bridge、plugin-ui、shared-utils、plugin-dev-server 业务插件(通常独立 Git 仓库,安装为 JAR) ├── gress-plugin-iam/ # 权限 / 登录等 ├── gress-plugin-appstore/ └── … ``` ### 后端分层 ``` ┌─────────────────────────────────────────────────────────────┐ │ gress-web(Spring Boot 宿主,单进程) │ │ REST / SSE / 安全 / 多租户 / 插件管理 API │ │ context-path 默认 /gress,端口默认 8082 │ └───────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────┐ │ gress-core │ │ PluginPackageLifecycleManager install / start / stop / … │ │ PluginExtensionManager BEFORE/AFTER 扩展链 │ │ PluginPackageStartupService 按 plugin.startup.package-ids 启动 │ │ Pf4jPackageAdapterImpl PF4J 加载 JAR │ │ PluginContainer + DI 注解 插件内 Bean │ │ PluginConfigLoader plugin.yml + DB 配置合并 │ │ 可选工作流:TriggerLifecycleManager、WorkflowExecutor 等 │ └───────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────┐ │ 已安装插件 JAR(PF4J pluginsDir,默认 plugins/) │ │ 每包:plugin.yml、扩展类、Flyway、Controller(经宿主路由暴露) │ └─────────────────────────────────────────────────────────────┘ ``` ### 插件包生命周期(后端) 与前端 manifest 的 `activate` **不是同一套概念**。后端主路径: | 阶段 | 说明 | 关键类 | |------|------|--------| | **INSTALL** | 加载 JAR、PF4J start、扩展链 AFTER:扫描 `@PluginSpec`、合并配置、启动 `PluginContainer`、Flyway | `PluginPackageLifecycleManager` | | **START** | 重启/加载后再次启动容器与服务 | 同上 + `PluginConfigLoaderExtension` | | **STOP** | 停止容器、反注册服务 | `DIContainerScannerExtension` 等 | | **UNINSTALL** | PF4J stop/unload、清理仓库与资源 | `PluginPackageLifecycleManager` | | **UPGRADE / RELOAD** | 升级与热重载场景 | `LifecycleContext` / `UpgradeContext` | 每个阶段还有 **BEFORE / AFTER**,由 `PluginLifecycleEventType` + `LifecyclePhase` 分发给各 `PluginExtension`。 插件入口类可实现 **`PluginLifecycleHook`**(`BEFORE_INSTALL`、`AFTER_START` 等),由 `PluginLifecycleHookDispatcher` 调用。 ### 前端加载流程(概要) ``` initializePluginFramework() → createPluginBridge() // window.GressBridge → createPluginRuntime() // window.__GRESS_PLUGIN_RUNTIME__ 生产:plugin-loader 插入