开发

环境

  • JDK 21

  • Gradle 8.x

  • pnpm

构建

# 前端(如修改了 ui/ 目录)
cd ui && pnpm install && pnpm build
cp dist/main.js dist/style.css ../src/main/resources/console/

# 后端
./gradlew build

# 产物位于 build/libs/plugin-oneimg-X.X.X.jar

目录结构

├── ui/                          # Vue 3 前端(同步标签页)
│   ├── src/
│   │   ├── index.ts             # 插件入口,注册扩展点
│   │   └── SyncView.vue         # 同步 UI 组件
│   └── vite.config.ts           # IIFE 构建配置
├── src/main/java/io/github/alonenannan/oneimg/
│   ├── OneImgPlugin.java        # 插件生命周期
│   ├── OneImgAttachmentHandler.java  # 上传/删除附件
│   ├── OneImgSyncEndpoint.java  # 同步 REST API
│   └── OneImgUtils.java         # 配置校验等工具方法
└── src/main/resources/
    ├── plugin.yaml              # 插件元数据
    ├── console/                 # 前端构建产物
    └── extensions/
        ├── policy-template.yaml # 存储策略表单
        └── settings.yaml        # 插件设置

技术架构

  • 基于 Halo Plugin Framework,实现 AttachmentHandler 扩展点

  • 上传使用 Spring WebClient 调用初春图床 API(响应式非阻塞)

  • 同步使用 java.net.http.HttpClient,异步执行 + 前端轮询实时日志,完成后自动反向清理失效附件;API 基于 Spring Security 做登录鉴权

  • 前端 Vue 3 + Vite,通过 plugin:self:tabs:create 扩展点注册标签页

许可证

GPL-3.0