开发
环境
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