为 Lithe 提供 Gradle 项目支持:识别 Gradle 构建,在 Gradle 工具窗口里像
IntelliJ IDEA 一样按项目列出任务分组和依赖配置,运行任务、应用和测试。
这是一个社区插件,用 Lithe 的声明式构建系统接口(插件 API 3 的 buildSystems)实现,
只带一个 Gradle 初始化脚本,没有任何宿主代码。工具窗口由 macOS 宿主用 SwiftUI 原生渲染,插件不提供 Web 入口;
languageImport 把 Offline 和 Gradle User Home 选项传给 Java 语言服务器的 Gradle 导入。
English: Gradle support for Lithe through the declarative
buildSystemsplugin API — projects with their tasks by group, JavaExec tasks as run entries, test runs with JUnit reports, compiler diagnostics and per-configuration dependency trees. It runs your own Gradle with a bundled init script.
试用版:
buildSystems接口还在 Lithe 的预览分支上,0.1.0 作为预发布版本提供,需要包含该接口的 Lithe 开发版。
| 功能 | 说明 |
|---|---|
| 识别项目 | 最外层含 settings.gradle(.kts) 或 build.gradle(.kts) 的目录是构建根,include 的子项目组成项目树 |
| 任务 | 每个项目的全部任务,按 Tasks › <分组> 归类(build、verification、help…,没有分组的放在 other);根项目任务按名称运行(作用于所有项目,与 gradle build 相同),子项目任务按路径运行(:app:build) |
| 运行 | JavaExec 类型的任务(如 application 插件的 run)作为可运行的应用 |
| 自定义任务 | “Run Gradle Tasks…” 输入任意任务和参数,选中子项目时在该项目目录下运行 |
| 选项 | 工具栏开关 Offline(--offline);Gradle User Home(--gradle-user-home) |
| 测试 | 运行项目、测试类或单个方法(--tests),读取 build/test-results/test 的 JUnit XML 报告;--rerun 仅重新执行所选测试任务,编译等依赖仍使用增量缓存,避免旧报告被宿主过滤后显示为零 |
| 诊断 | 把 javac 的 `文件:行: error |
| 依赖 | 每个项目按 source set 的 compileClasspath、runtimeClasspath、annotationProcessor 等配置显示依赖树;已出现过的组件标记为省略,不重复展开(与 gradle dependencies 的 (*) 相同) |
| 内容根 | source set 的 Java/Kotlin/Groovy/Scala 源码、资源和注解处理器生成目录;build 与 .gradle 标为排除 |
| 同步 | 构建脚本、gradle.properties、gradle/libs.versions.toml、Wrapper 配置变化后重新读取项目 |
插件不带 Gradle,使用你项目或电脑上的 Gradle,按以下顺序查找:
- 项目里的 Gradle Wrapper(
gradlew,需要gradle/wrapper/gradle-wrapper.properties); - 环境变量
GRADLE_HOME下的bin/gradle; PATH里的gradle。
要求 Gradle 7.6 或更新版本,以及该 Gradle 版本支持的 Java(Gradle 9 需要 Java 17)。
读取项目和依赖时,插件用 --init-script 给你的 Gradle 加载随包提供的 lithe.init.gradle:
litheModel在所有项目配置完成后,把项目、任务和 source set 写成 Lithe 的litheBuildModel文档;litheDependencyReport在每个项目内解析依赖配置,再写成litheDependencies文档。 文件位置由 Lithe 指定(-PlitheModelOutput/-PlitheDependenciesOutput)。- 这两个命令附带
--no-configuration-cache和--no-configure-on-demand,确保读到所有项目; 只导出最外层构建,buildSrc和 included build 不会覆盖结果。 - 不会编译、打包或生成
build/;解析依赖只下载依赖的元数据,不下载 jar。 - 不带这些属性时脚本只注册任务,不做别的事;插件目录在运行时保持只读。
读取项目会执行构建脚本和其中的插件,首次读取还可能联网下载插件和依赖元数据,所以 Lithe 会先确认你信任这个工作区。
v0.1.1 修复重复运行测试时报告显示为零的问题,需要兼容 buildSystems 插件 API 3 的 Lithe preview 开发版。
Lithe Store 条目合并后,可在 设置 → 插件 → 插件市场 搜索 “Gradle”,安装并按提示重启;
条目合并前可下载 Release 的 ZIP,从 Lithe 开发版的 ⚙ → 从磁盘安装插件… 安装。
Lithe 已预置 Lithe Store 社区插件源;如果你之前移除了它,先在 ⚙ → 管理插件仓库… 中重新添加
https://github.com/Lithe-IDEA/Lithe-store。
一个包同时支持 Apple Silicon 和 Intel Mac;Lithe for Windows 支持插件市场后会增加 Windows 包。
io.github.lithe-idea.gradle-build/plugin.json # 插件描述,目录名必须等于插件 id
io.github.lithe-idea.gradle-build/lithe.init.gradle # 初始化脚本,导出模型和依赖树
io.github.lithe-idea.gradle-build/icons/ # 工具窗口和工具栏图标(来源见 NOTICE)
test/fixtures/multi/ # 两个子项目的示例构建,供集成测试使用
scripts/package.mjs # 打包成 dist/gradle-build-<版本>-darwin.zip
scripts/test.mjs # 用真实 Gradle 运行清单里的命令并检查输出
.github/workflows/ci.yml # PR 时打包、用 Gradle 7.6 和 9.6.1 测试,并用 Lithe Store 的规则检查
.github/workflows/release.yml # 推送 v<版本> 标签时发布 GitHub Release
本地需要 Node.js 22+、JDK 17+ 和 Gradle(还需要 zip):
node scripts/package.mjsGRADLE=/path/to/gradle node scripts/test.mjs只验证测试报告回归时可运行 GRADLE=/path/to/gradle node scripts/test.mjs --test-results-only;它连续运行两次相同测试,检查第二次报告刷新且测试类没有重新编译。
测试使用临时工作区和独立的 Gradle User Home,每个 Gradle 命令最多运行 120 秒,结束时有界停止该测试的守护进程并清理临时目录。
每次运行都使用 --no-daemon;初始化脚本自己的运行还带 --warning-mode=fail,出现弃用警告即失败。
输出记录命令和每项断言的耗时,并检查运行前后插件包的文件清单与 SHA-256 保持不变。
在 Lithe 开发版中,通过 设置 → 插件 → ⚙ → 从磁盘安装插件… 选择
dist/package/io.github.lithe-idea.gradle-build 即可安装本地开发包(发行版 Lithe 不加载未签名的开发包)。
plugin.json 的完整格式见 lithe-plugin-docs 里的
插件契约
和构建工具接入指南。
-
修改
plugin.json的version(例如0.2.0),合入main。 -
推送同名标签:
git tag v0.2.0 && git push origin v0.2.0 -
Release工作流会核对标签与版本、打包、测试并发布 Release(说明里附 SHA-256);v0.1.0会直接标为预发布。 -
v0.1.0预发布需要单独提交 Lithe Store 条目合并请求;后续稳定版可由 Store 自动追踪并开合并请求,合并后用户即可在 Lithe 中更新。
Apache-2.0。图标来自 IntelliJ Platform,见 NOTICE。