# Summary
makefile 是语言无关的,并不是 [[CPP]] 专属的,可以理解为所谓的构建工具就是一个统一管理 [[Shell脚本]]的脚本,类似 [[docker compose]] 和 docker命令的关系
传统:
Make (1976) → 通用任务编排
语言特定:
[[npm]]/yarn (JS) → `package.json` scripts
[[Maven]]/Gradle (Java) → 依赖 + 构建生命周期
[[Cargo]] (Rust) → `Cargo.toml`
Poetry (Python) → `pyproject.toml`
通用现代工具:
Task/Just → 现代化的 Make
Bazel/Buck → 大型项目构建系统
# Cues
[Makefile](Makefile.md)
[[toml]]
# Notes
你问的 **`task use` / `task run`** 并不是 Go 语言的特色,而是一个叫 **[[Taskfile]]** 的构建工具(项目里通常有个 `Taskfile.yml`),有点类似于 Java 世界里的 **Maven / Gradle** 里的任务。
# 对比理解
| 工具/语言环境 | 特点 | 类比 |
| ----------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- |
| **Go + Taskfile** | 用 `Taskfile.yml` 定义常用命令(build、run、test),然后通过 `task xxx` 调用。轻量、跨平台。| 相当于 **Maven/Gradle** 的 `mvn package` 或 `gradle build`,但更简单,偏向“脚本化任务管理”。|
| **Java + Maven** | 用 `pom.xml` 定义依赖和生命周期任务,`mvn install`、`mvn test`。| 偏重依赖管理 + 生命周期。|
| **Java + Gradle** | 用 `build.gradle` 定义任务和依赖,`gradle build`、`gradle run`。| 更灵活,类似脚本 DSL。|
| **Go 世界常见替代品** | 除了 Task,还会用 Makefile (`make build`) 来组织任务。| 相当于 Java 里自己写 shell 脚本来替代 Maven/Gradle 的部分功能。|
---
所以:
- `task use` → 对应 “Maven 的 mvn package / Gradle 的 gradle build”
- `task run` → 对应 “mvn spring-boot:run / gradle run”
只是写法不同,本质上都是“把常用命令封装进一个工具,开发者用短命令来统一执行”。
要不要我帮你直接把 **TEN-framework 项目里的 Taskfile.yml 中 `use` 和 `run` 的内容找出来**,逐条对比 Java 里的对应功能?