侧边栏壁纸
  • 累计撰写 225 篇文章
  • 累计创建 70 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

摸鱼神器:AI打造的博客IDEA插件

橙序员
2025-05-29 / 0 评论 / 0 点赞 / 57 阅读 / 1,899 字 / 正在检测百度是否收录... 正在检测必应是否收录...
文章摘要(AI生成)

为了提升博客的浏览量和用户粘性,笔者开发了一个名为“博客助手插件”(orange-tech)的IntelliJ IDEA插件。该插件提供了结构化的博客内容查看功能,并整合了AI聊天样式,方便用户在工作中轻松浏览文章。文中详细记录了从零开始开发插件、构建自动化打包流程到发布到GitHub的全过程,分享了在开发中遇到的各种挑战及解决方案,包括文章列表和详情的展示、UI渲染的美化、以及大型语言模型(LLM)的搭建等。此外,笔者总结了Gradle打包与发布的演进过程,并介绍了如何使用GitHub Actions实现自动化构建与发布。整个开发过程中,AI的辅助被充分利用,助力高效排错和优化设计。综上所述,这一插件的开发不仅是对多项技术的实践,也展示了AI在开发过程中的重要作用。


为了增加博客浏览量并提高用户粘性,方便我的读者们在工作之中摸鱼看文章。因此,我开发了一个 IntelliJ IDEA 插件 —— 博客助手插件(orange-tech),它不仅支持博客内容的结构化查看,还集成了AI气聊天样式等功能辅助预览。

这篇文章将完整记录我从 0 到 1 开发该插件、构建自动化打包流程、发布到 GitHub 的实战经验,包括中间遇到的种种坑,以及解决的思路。


✨ 插件功能概览

博客助手插件主要解决两个痛点:

  1. 结构化预览:通过调用博客服务端接口,异步获取并展示文章列表,结合 JList 列表组件进行快速导航。
  2. 文章阅读器:基于 JBCefBrowser 组件加载文章详情,直接在 IDEA 中浏览网页,模拟真实博客阅读体验。
  3. **AI对话 **:支持将特定格式的评论转换为“气泡式对话”样式,模仿朋友圈动态的展示方式,适合博主发布图文内容或教程合集。

配图示意:

模块 功能点 截图
博客文章 文章列表 image-1748450223522
|_______________________ 文章搜索 image-1748450238989
|_______________________ 文章查看 image-1748450255651
AI 对话展示 image-1748450265657
|_______________________ 快捷功能 image-1748450278257

最终我设计的插件功能组件图如下:

image-1748450287142


🛠 功能开发中的挑战

image-1748450201423

1. 文章列表和详情

不同于简单的本地文件分析,博客列表是通过 HTTP API 获取后进行展示的,遇到了下列问题:

  • 列表添加后需要再给 JList 刷新,我通过加签访问服务端后对返回数据进行解析,通过 Swing 做了列表可视化;
  • 文章详情页展示,因为我的博客文章都为 HTML 页,所以在 IDEA 插件中使用 JBCefBrowser 来实现文章页展示;
  • 无法在开发模式下展示 localhost 路径,必须输入全部 URL 路径,还通过 CefLoadHandlerAdapter 执行 JS 来调整文章页展示样式。

2. 气泡 UI 渲染

  • AI 聊天需要手动控制 UI 布局,重点问题:
    • UI 不美观,聊天气泡和气泡尖角需自己控制圆角、边距、背景;
    • UI 与 Swing 系统不符,需进行跨系统符合处理;
    • AI 返回的 Markdown 结果需要用 Flexmark 转为 HTML,再通过自定义标签展示。

3. LLM 搭建

既然是AI对话,那能少的了搭LLM呢,免费的flowise搞一个:

image-1748450322726

这个工作量主要就是调试prompt了,可以参考我写的这篇文章:引导AI,探索无限可能:深入了解prompt, flowise我之前也讲过,可以下载插件后直接搜索关键字看相应文章


⚙ Gradle 打包与发布流程演进

最开始的打包方式遇到多个问题,逐步演进如下:

❌ 起初使用 build 直接 JAR 打包

第一次尝试构建后,得到的 plugin.jar 文件在本地测试时无法被 IDE 正确识别或安装。

  • 原因:缺失依赖,或者未打入 plugin.xml、资源文件等

⚠ 使用 shadow 插件打包 fat jar

引入 com.github.johnrengelman.shadow 将所有依赖合并打包,但实际测试发现:

  • 插件上传到 Marketplace 后运行时报错
  • IDEA 插件平台对 JAR 内重复类资源较为敏感,容易触发 ClassNotFoundException

✅ 最终改用 Gradle 官方 distribution 插件

通过配置 distribution 插件,明确打包路径和 zip 名称:

distributions {
    main {
        distributionBaseName.set("orange-tech-${project.version}")
        contents {
            from("build/libs") {
                include("*.jar")
            }
            from("src/main/resources") // 如有额外资源
        }
    }
}

优点:

  • 控制打包结构
  • ZIP 命名清晰
  • 发布到 GitHub Release 不依赖额外插件

🚀 自动化构建与发布(GitHub Actions)

为了实现一套完整的自动构建与部署流程,我们配置了两套工作流:

🧪 Snapshot 发布(feature 分支)

触发时机:

on:
  push:
    branches:
      - 'feature-**'

核心逻辑:

  • 检查版本是否为 -SNAPSHOT
  • 执行 buildPlugin + distZip
  • 使用 gradlew publish 发布到 GitHub Packages(需配置 credentials)

常见问题:

  • 发布失败:未指定 ZIP 位置
  • 版本号错误:非 *-SNAPSHOT 版本被误推送,Action 失败导致无法合并

📦 正式发布(Release)

触发时机:

on:
  release:
    types: [published]

上传 ZIP 文件:

- name: Upload ZIP asset
  uses: actions/upload-release-asset@v1
  with:
    upload_url: ${{ github.event.release.upload_url }}
    asset_path: build/distributions/orange-tech-${{ env.VERSION }}.zip
    asset_name: orange-tech-${{ env.VERSION }}.zip
    asset_content_type: application/zip
  env:
    VERSION: 1.0.4
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

注意:

  • env.VERSION 需在脚本前注入(使用 echo "VERSION=$VERSION" >> $GITHUB_ENV
  • upload_url 仅在 Release 事件中存在,其他事件无效

💡 AI 助力开发:从助手到加速器

整个插件开发过程,我也充分借助了 AI (chat gpt、 豆包)的能力,成为提升效率、排雷避坑的重要方式。

chat gpt 豆包
image-1748450340542 image-1748450347504
  • 配置调试助手:在 Gradle 构建、GitHub Actions 配置等流程中,通过 AI 快速定位错误点并生成可执行的 YAML、Groovy 脚本。
  • 设计优化建议:在插件 UI 渲染、架构模块划分等方向,AI 提供了多种实现思路,节省大量试错时间。
  • 文档与发布辅助:包括 plugin.xml 的编写、Release Notes 的组织,甚至这篇技术总结文章的结构和逻辑,也参考了 AI 的建议。

AI 不再只是一个搜索引擎替代者,而是插件开发旅程中的“对话式编程伙伴”。它帮助我从“能做”更快走向“做得优雅”,未来我也将继续探索 AI 与本地开发工具的结合方式。


🔚 总结与建议

插件开发是对 Java Swing、Gradle 构建、GitHub Actions 自动化的综合实践。在这个博客助手插件项目中,我收获了以下几点:

  • 🚧 插件功能设计要小而美,聚焦实际使用场景
  • 📦 Gradle 多种打包方式需权衡,最终选用 distribution
  • ⚙ 自动化流程必须分阶段(snapshot vs release),避免合并阻塞
  • 🧪 插件打包结构需真实测试,发布后再修复代价大

本项目完整源码与构建流程详见:

👉 GitHub 项目地址:https://github.com/shiker1996/orange-assistant
👉 插件地址:https://plugins.jetbrains.com/plugin/27463-orange-assistant

如有任何问题或建议,欢迎评论或 Issue,我会持续优化插件功能,并考虑未来提供便签等能力,关注我,一起变得更强!

0

评论区

欢迎访问shiker.tech

请允许在我们的网站上展示广告

您似乎使用了广告拦截器,请关闭广告拦截器。我们的网站依靠广告获取资金。

订阅shiker.tech

文章发布订阅~

通过邮箱订阅文章更新,您将在文章发布时收到及时的邮件提醒~