乐于分享
好东西不私藏

eGPS v2.1 模块/插件认知教程《零》

eGPS v2.1 模块/插件认知教程《零》

eGPS v2.1 模块/插件认知教程《零》

https://github.com/yudalang3/egps-shell/blob/main/manuals/00Readme_zh.md

这里 github 的地址是永久地址。

eGPS 模块与插件开发教程

欢迎来到 eGPS 模块开发教程!

本教程将引导你从零开始学习如何为 eGPS 开发自定义模块和插件。 无论你是想快速创建一个简单工具,还是开发复杂的分析模块,这里都有完整的指导。

模块定义(开发者视角)

  • 任何实现 IModuleSignature 接口的类都是一个模块;IModuleLoader 继承了 IModuleSignature,因此 GUI 加载器也是模块。模块可以是命令行(CLI)的,也可以是图形界面(GUI)的。
  • GUI 模块分三类:Mainframe core modules(主框架核心、固定模块)、iTools/independent tools(内置独立工具;与核心一起构成 built-in 模块)、plug-in modules(外部插件 JAR)。所以模块简单地讲有 built-in 和 plug-in 两种。
  • ModuleInspector 可以跟踪以上三类 GUI 模块;Module Gallery 展示的是其中当前 active loader set 里的模块。
  • 菜单对应:Mainframe core 菜单(核心模块)、iTools 菜单(独立工具)、Plug-ins 菜单(插件模块)。

📚 教程目录

🚀 01. 快速开始

适合人群:所有开发者

学习内容

  • 5 分钟创建你的第一个模块
  • 使用自动化脚本快速生成插件
  • 理解 Plug-in 和 Built-in 两种部署方式
  • 安装和测试插件

亮点

  • ✅ 一键生成示例插件
  • ✅ 立即看到效果
  • ✅ 理解核心概念

时间:5-10 分钟


🔌 02. 插件开发教程(Plugin 模式)

适合人群:希望开发外部扩展的开发者

学习内容

  • 两种插件开发方式详解
    • 方式 1:继承 FastBaseTemplate(简单快速)
    • 方式 2:实现 IModuleLoader(灵活强大)
  • 完整的开发流程
  • 编译、打包、安装步骤
  • 进阶技巧和最佳实践

示例项目

  • 文本处理工具(FastBaseTemplate)
  • 数据分析工具(IModuleLoader)

时间:30-60 分钟


🏠 03. 内置模块开发教程(Built-in 模式)

适合人群:希望开发核心功能的开发者

学习内容

  • Built-in 与 Plug-in 的关系
  • 如何将插件转为内置模块
  • 内置模块的优势和适用场景
  • 两种模式的自由转换

核心概念

  • 本质相同:代码和 JAR 结构完全一样
  • 位置决定:存放位置决定展示方式
  • 可以互换:一个命令即可转换

示例项目

  • 系统信息工具

时间:20-30 分钟


🏗️ 04. 架构原理说明

适合人群:希望深入理解系统的开发者

学习内容

  • eGPS 模块系统架构
  • IModuleLoader 接口设计
  • ModuleFace 基类详解
  • FastBaseTemplate 工作原理
  • 模块发现机制(ModuleDiscoveryService
  • Plugin 和 Built-in 的技术实现
  • ClassLoader 和类加载机制
  • 扩展点和自定义开发

适合场景

  • 需要定制模块加载机制
  • 开发复杂的插件系统
  • 贡献代码到 eGPS 核心

时间:60-90 分钟


📄 配置文件说明书

适合人群:所有插件开发者

学习内容

  • eGPS2.plugin.properties 配置文件格式详解
  • 所有配置项的详细说明(必需/可选)
  • 配置项格式要求和示例
  • 常见错误和解决方法
  • 最佳实践和配置模板

核心配置项

  • ✅ launchClass – 启动类(必需)
  • ✅ dependentJars – 依赖库(按需)
  • ℹ️ pluginName / version / author / description – 可作为补充元数据书写,但当前加载器不依赖这些字段

时间:10-15 分钟


🛠️ 自动化工具

create-all-test-plugins.sh

位置docs/module_plugin_course/create-all-test-plugins.sh

功能

  • 一键生成 4 个功能完整的示例插件
  • 自动编译、打包
  • 输出到 plug_dist 目录

使用方法

# 进入项目根目录cd /path/to/egps-main.gui# 运行脚本bash docs/module_plugin_course/create-all-test-plugins.sh# 查看生成的文件ls plug_dist/

生成内容

  • fastbase-plugin.jar – 继承 FastBaseTemplate 的简单示例
  • direct-plugin.jar – 实现 IModuleLoader 的复杂示例
  • calculator-plugin.jar – 实用计算器(含中英文文档)
  • clipboardpaste-plugin.jar – 路径转换工具(Windows ↔ WSL)
  • README.txt – 完整安装说明

📖 学习路径推荐

🌟 路径 1:快速上手(推荐新手)

1. 快速开始 (01)   └─ 运行自动脚本,看到效果      └─ 5 分钟2. 插件开发 - FastBaseTemplate (02)   └─ 学习简单的开发方式      └─ 30 分钟3. 实践项目   └─ 创建自己的第一个插件      └─ 1-2 小时

总时间:2-3 小时产出:一个可用的插件


🚀 路径 2:全面掌握(推荐进阶)

1. 快速开始 (01)   └─ 了解基本概念      └─ 10 分钟2. 插件开发 - 两种方式 (02)   └─ 掌握完整开发流程      └─ 60 分钟3. 内置模块开发 (03)   └─ 理解部署方式      └─ 30 分钟4. 架构原理 (04)   └─ 深入理解系统      └─ 90 分钟5. 实践项目   └─ 开发复杂的插件      └─ 4-8 小时

总时间:6-10 小时产出:深入理解 + 高质量插件


🎯 路径 3:按需学习(推荐实用主义者)

根据你的需求选择:

需求
阅读章节
时间
快速创建简单工具
01 + 02 (方式1)
30 分钟
开发复杂插件
01 + 02 (方式2)
90 分钟
了解部署方式
01 + 03
40 分钟
贡献核心代码
全部
3 小时
定制加载机制
04 + 源码
2 小时

🎯 核心概念速查

Plugin 模式 vs Built-in 模式

┌─────────────────────────────────────────────────────┐│               同一个 JAR 文件                        ││         (代码、结构完全相同)                         │└──────────────────┬──────────────────────────────────┘                   │       ┌───────────┴───────────┐       │                       │       ▼                       ▼┌──────────────┐        ┌──────────────┐│ Plugin 模式   │        │ Built-in 模式 │├──────────────┤        ├──────────────┤│ 位置:         │        │ 位置:         ││ ~/.egps2/    │        │ dependency-  ││ config/      │        │   egps/      ││ plugin/      │        │              │├──────────────┤        ├──────────────┤│ 显示:         │        │ 显示:         ││ "Plugins"    │        │ "iTools"     ││ 菜单         │        │ 菜单         │├──────────────┤        ├──────────────┤│ 适合:         │        │ 适合:         ││ - 外部扩展   │        │ - 核心功能   ││ - 用户工具   │        │ - 默认工具   ││ - 实验功能   │        │ - 随应用发布 │└──────────────┘        └──────────────┘       │                       │       └───────────┬───────────┘                   │                   ▼         ┌──────────────────────────┐         │ 都可能进入模块系统         │         │ Gallery 展示取决于当前      │         │ active loader set         │         └──────────────────────────┘

关键点

  • ✅ 可以复用同一套模块代码与接口
  • ✅ 同一个 JAR 往往可以在两种部署方式之间转换
  • ⚠️ 进入壳层的运行路径并不完全相同
  • ⚠️ “被发现”不等于“当前已激活并显示在 Gallery”
  • ✅ Plugin 模式会显示 [Plug] 标识
  • ✅ 重复模块会弹出警告对话框

🏷️ [Plug] 标识(v2.1+)

Plugin 模式的模块在 Module Gallery 中会显示蓝色 [Plug] 标识:

Module Gallery:  ├─ File Manager          (Built-in)  ├─ Simple Calculator [Plug]  (Plugin)  └─ ClipboardPaste [Plug]     (Plugin)

作用

  • 快速识别外部插件
  • 区分内置模块和外部扩展
  • 用户友好的视觉提示

⚠️ 重复模块检测(v2.1+)

当同一模块同时存在于两个位置时:

~/.egps2/config/plugin/my-plugin.jar  ← Plugindependency-egps/my-plugin.jar         ← Built-in

系统行为

  1. ✅ 优先使用 classpath (dependency-egps) 版本
  2. ⚠️ 控制台输出警告信息
  3. 📋 弹出警告对话框提示用户
  4. 💡 建议删除其中一个 JAR 文件

推荐做法:保留一个位置的 JAR,删除另一个


两种开发方式

方式 1: 继承 FastBaseTemplate

publicclassMyToolextendsFastBaseTemplate{publicMyTool(){super();// 构建 UI    }public String getTabName()return"我的工具"; }public String getShortDescription()return"简单工具"; }publicint[] getCategory() {return ModuleClassification.getOneModuleClassification(            ModuleClassification.BYFUNCTIONALITY_SIMPLE_TOOLS_INDEX,            ModuleClassification.BYAPPLICATION_COMMON_MODULE_INDEX,            ModuleClassification.BYCOMPLEXITY_LEVEL_1_INDEX,            ModuleClassification.BYDEPENDENCY_ONLY_EMPLOY_CONTAINER        );    }}

特点:代码少、快速开发、适合简单工具


方式 2: 实现 IModuleLoader

// 加载器publicclassMyModuleLoaderimplementsIModuleLoader{private MyPanel panel;publicMyModuleLoader(){        panel = new MyPanel(this);    }public ModuleFace getFace()return panel; }// 其他方法...}// 面板classMyPanelextendsModuleFace{publicMyPanel(IModuleLoader loader){super(loader);// 构建 UI    }// 其他方法...}

特点:架构清晰、完全控制、适合复杂功能


📦 JAR 文件结构

无论哪种方式,JAR 文件结构都相同:

myplugin.jar├── eGPS2.plugin.properties     # 配置文件(必需)│   ├── launchClass=...│   ├── pluginName=...│   ├── version=...│   └── author=...└── com/mycompany/              # 你的代码    ├── MyPlugin.class    └── MyPanel.class

🎨 示例项目

自动生成的示例插件

使用脚本一键生成 4 个功能完整的示例插件:

# 使用脚本生成所有示例bash docs/module_plugin_course/create-all-test-plugins.sh

生成的插件

  1. fastbase-plugin.jar – FastBaseTemplate 简单示例

    • 代码量:约 70 行
    • 特点:最简单的实现方式
    • 适合:快速开发工具型插件
  2. direct-plugin.jar – IModuleLoader 复杂示例

    • 代码量:约 200 行
    • 特点:架构清晰,Loader/Panel 分离
    • 适合:大型复杂插件
  3. calculator-plugin.jar – 实用计算器 ⭐

    • 代码量:约 400 行
    • 功能:基本算术运算、键盘支持、错误处理
    • 文档:完整的中英文 HTML 文档
    • 适合:学习如何实现实用工具
  4. clipboardpaste-plugin.jar – 路径转换工具 ⭐

    • 代码量:约 500 行
    • 功能:Windows ↔ WSL 路径转换、剪贴板集成
    • 文档:完整的中英文 HTML 文档
    • 适合:学习如何开发开发者工具

内置模块示例

参考源码:

  • 文件管理器:src/egps2/builtin/modules/filemanager/
  • 模块画廊:src/egps2/builtin/modules/gallerymod/
  • 文本编辑器:src/egps2/builtin/modules/largetextedi/

🔧 开发工具推荐

IDE

  • IntelliJ IDEA(推荐)

    • 优秀的 Java 支持
    • 内置 Maven/Gradle
    • 强大的重构功能
  • Eclipse

    • 免费开源
    • 丰富的插件生态

构建工具

  • 手动脚本(本教程使用)

    • 简单直接
    • 易于理解
  • Maven(可选)

    • 依赖管理
    • 标准化构建
  • Gradle(可选)

    • 灵活强大
    • Groovy/Kotlin DSL

📚 相关文档

eGPS 核心文档

  • 请查阅docs目录

源码参考

  • 核心接口:src/egps2/modulei/IModuleLoader.java
  • 基础类: src/egps2/frame/ModuleFace.java
  • 快速模板:src/egps2/plugin/fastmodtem/FastBaseTemplate.java
  • 模块发现:src/egps2/frame/features/ModuleDiscoveryService.java
  • 配置读取:src/egps2/plugin/manager/PluginProperty.java
  • 插件加载:src/egps2/plugin/manager/PluginOperation.java
  • 内置模块示例:src/egps2/builtin/modules/

教程文档

  • 01. 快速开始
  • 02. 插件开发教程
  • 03. 内置模块开发教程
  • 04. 架构原理说明
  • 配置文件说明书 ⭐ 必读

🤝 获取帮助

常见问题

查看各教程文档的”常见问题”部分:

  • 01 – 快速开始 FAQ
  • 02 – 插件开发 FAQ
  • 03 – 内置模块 FAQ

调试技巧

// 使用日志import org.slf4j.Logger;import org.slf4j.LoggerFactory;publicclassMyPluginextendsFastBaseTemplate{privatestaticfinal Logger logger = LoggerFactory.getLogger(MyPlugin.class);publicMyPlugin(){super();        logger.info("MyPlugin initialized");        logger.debug("Debug info: {}", someValue);    }}

查看控制台

启动时能看到模块加载的详细信息:

java -cp "./out/production/egps-main.gui:dependency-egps/*" egps2.Launcher

✨ 快速开始

第一步:运行自动脚本

cd /path/to/egps-main.guibash docs/module_plugin_course/create-all-test-plugins.sh

第二步:安装插件

# 方式 A: 作为插件cp plug_dist/*.jar ~/.egps2/config/plugin/# 或方式 B: 作为内置模块cp plug_dist/*.jar dependency-egps/

第三步:启动 eGPS

java -cp "./out/production/egps-main.gui:dependency-egps/*" egps2.Launcher

第四步:查看你的模块

  • 按 Ctrl+2 打开 Module Gallery
  • 或从菜单选择 Plugins / iTools

🎓 学习提示

  1. 边学边做:每看完一章,立即动手实践
  2. 参考示例:内置模块的源码是最好的学习资料
  3. 小步前进:先从简单的 FastBaseTemplate 开始
  4. 理解原理:掌握架构后,开发更得心应手
  5. 善用工具:自动化脚本能节省大量时间

📅 版本信息

  • 教程版本:1.0
  • eGPS 版本:2.1+
  • 最后更新:2026-03-18
  • 作者:eGPS Dev Team
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » eGPS v2.1 模块/插件认知教程《零》

猜你喜欢

  • 暂无文章