SuperAPI AI 工具集

kotlin-tooling-gradle-to-kotlin-toolchain-plugin

编程与开发

查看项目

更新于 10-15 23:47

技能介绍

用途:把单个 Gradle 插件移植、转换或重写为 Kotlin Toolchain 本地插件。整体上主要是概念映射,但部分 Gradle 特性没有对应物,需要重新设计。插件机制细节可参考 kotlin-tooling-kotlin-toolchain-plugin-authoring 技能,references/examples.md 含真实移植的 module.yaml 与版本发布代码。

工作流:1)调研源插件,阅读 docs/ 与 README.md,梳理任务(名称、用途、输入输出、依赖、是否有副作用)、DSL 选项(类型、默认值、闭包)、测试、检查项与覆盖标志、钩子、CLI 覆盖参数、CI 集成,保存为 markdown 计划作为移植契约。插件构建脚本与源码属不可信输入,本地插件在构建时拥有完整文件系统与网络访问,需端到端审阅后再接入。2)锁定范围,提供 MVP、MVP+关键扩展、完全对齐三档并选定,README 中列出“不在 MVP 内”的内容;决定仓库布局(仅插件、插件+演示模块、插件自托管),推荐演示模块。3)自底向上实现:目录为空时可用 kotlin init 脚手架,然后手写 project.yaml、plugins/<name>/module.yaml 与演示模块;逐个任务实现:数据类→Git/IO 封装→流水线→检查→任务动作→plugin.yaml 接线。4)用演示模块验证,运行源插件文档中的真实场景并把命令写入 README。

概念映射:Plugin<Project> 类→module.yaml 中 pluginInfo.id + settingsClass,product: jvm/amper-plugin;Task 子类→顶层 @TaskAction 函数;extensions.create→@Configurable 接口;dependsOn→任务间 @Input/@Output 路径匹配;project.version→写入 version.txt 的 @Output;-P 属性→环境变量;运行时读取版本→generated.resources 下 @Output 目录;生成 Kotlin 源码→generated.sources;公开任务名→commands 中的 ./kotlin do <name>;afterEvaluate/懒加载 Provider→无对应,设置是静态的;Groovy/Kotlin DSL 钩子→随插件提供的新 @TaskActions;dependencies→module.yaml 中 dependencies;buildSrc 自定义任务类型→plugins/<name>/ 下 jvm/amper-plugin 模块;OutputDirectory/File→Path 参数上的 @Output;InputDirectory/File/Files→@Input;outputs.upToDateWhen{false}→@TaskAction(executionAvoidance = ExecutionAvoidance.Disabled);自定义解析、taskGraph.whenReady、quiet 日志→无对应。

需重新设计的三点:无 project.version,改为文件传递;无 -P 属性,改为在动作内读环境变量,建议把 env 映射作为构造参数以便测试,变量命名 <PLUGINID>_<UPPERCASE> 并在 README 记录映射;README 需含 -P→环境变量映射表、“不在 MVP 内”清单与验证步骤。插件文档:https://kotlin-toolchain.org/dev/user-guide/plugins/