# Maguyva 的 Groovy 支持：面向 Gradle 与 Jenkins 代码的代码图谱

Canonical source: https://maguyva.ai/zh-hans/languages/groovy

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva 以 AST、符号和图谱支持 Groovy，让 AI 智能体跨越 Groovy 应用、Gradle 构建和 Jenkinsfile 追踪类、闭包和调用。

## 支持情况速览

- 支持等级: AST 和符号支持
- 编程语言
- 扩展名: .gradle, .groovy, .jenkinsfile
- 真正的 AST 解析，支撑语法感知搜索和结构化上下文。
- 命名符号支撑语义查找和交叉引用。启用关系提取后，即可使用图谱导航。
- 该语言为图谱感知搜索提供符号和关系；支持的边类型随其原生构造而异。
- 同时支持 AST 解析和符号提取。

## 最适合场景

- 用 Groovy 编写、共享构建逻辑分散在大量 `.gradle` 文件中的 Gradle 构建。
- 智能体在修改 CI 之前需要读懂的 Jenkins 流水线和共享库。
- 运行在 JVM 上的 Groovy 应用和 Spock 测试套件。

## 智能体工作流

- 在修改共享库步骤的参数之前，找到它的所有调用方。
- 追踪哪些构建脚本调用了公共 `.gradle` 文件中定义的辅助函数。
- 在重构之前，梳理哪些类继承了某个基类。

## Groovy 让浅层 AI 工具栽跟头的地方

Groovy 读起来常常像配置文件。在 Gradle 构建里，`dependencies { implementation ... }` 是一串带闭包的方法调用，声明式 Jenkinsfile 也是如此。构建器把任意名字变成调用，GDK 又给每个对象加上 `each`、`collect` 这样的方法。记录每一个调用的工具会被这些噪声淹没。

Maguyva 过滤掉 DSL 和 GDK 这一层，让你自己的方法和类凸显出来。

## Maguyva 在 Groovy 中提取什么

Maguyva 支持 `.groovy` 和 `.gradle` 文件以及 `Jenkinsfile`。类、函数和方法都会被提取，导入会规范化 `import static` 和 `as` 别名。调用名会去掉末尾的闭包块和 `?.` 安全导航运算符，因此 `repo?.save(order) { ... }` 会记录为对 `save` 的调用。类内部不带接收者的调用会解析到该类自己的方法。

噪声会分层过滤：

- 约 140 个标准库、Gradle 和 Spock 名称，如 `dependencies`、`implementation`、`task`、`given`、`when`、`then` 和 `Mock`。
- 约 260 个 GDK 方法，如 `each`、`collect`、`inject` 和 `eachLine`。
- 构建器 DSL 名称，包括 `pipeline`、`stage`、`steps` 和 `sh` 等 Jenkins 步骤，在以构建器风格使用、而不是带括号调用时会被过滤。
- `@CompileStatic`、`@Immutable` 和 `@Autowired` 等 AST 转换注解和框架注解，它们永远不会被记录为调用。

图谱还会记录继承、实例化和读写。

## 智能体提示词示例

- “谁调用了 `deployToStaging`，来自哪些流水线？”（先用 `find_symbol`，再用 `dependency_search` 的 incoming 方向）
- “哪些类继承了 `BaseIntegrationSpec`？”（`dependency_search`）
- “解释发布任务如何构建并发布制品。”（`get_task_context`）

## 已知限制

- Groovy 的方法和自由函数共用同一种语法节点，因此 `structural_search` 中的 `methods` 预设什么也选不到。请改用 `functions` 预设或 `find_symbol`。
- 与 GDK 或 DSL 方法同名的用户方法（如 `collect` 或 `stage`）可能会被一并过滤。如果某个调用方似乎缺失，请使用 `text_pattern_search`。

## 后续步骤

通过[快速入门](/zh-hans/docs/quickstart)连接仓库，然后在[兼容性页面](/zh-hans/docs/compatibility)查看支持矩阵。构建所编译的 JVM 代码请阅读 [Java 指南](/zh-hans/languages/java)和 [Kotlin 指南](/zh-hans/languages/kotlin)。

## 引擎细节

- Groovy 支持覆盖 `.groovy`、`.gradle` 和 `Jenkinsfile`。调用名会去掉闭包块和 `?.` 安全导航。
- 约 140 个标准库、Gradle 和 Spock 名称，以及约 260 个 GDK 方法，会从关系中过滤掉。
- 构建器 DSL 名称（包括 `stage` 和 `sh` 等 Jenkins 步骤）在构建器风格下会被过滤，注解永远不会被记录为调用。

## 常用 MCP 入口工具

- `find_symbol`: 需要共享库步骤、构建辅助函数或类的定义和调用方时使用它。
- `dependency_search`: 对构建辅助函数使用 incoming 方向遍历，查看哪些脚本和流水线调用了它。
- `text_pattern_search`: 用于查找 DSL 调用和 GDK 方法，这些调用已从图谱中过滤掉。
