awesome-copilot 实战指南:create-spring-boot-java-project 技能一键生成 Spring Boot 项目骨架
【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot
create-spring-boot-java-project是 awesome-copilot 仓库中由社区贡献的 Agent Skill,其核心使命是让 GitHub Copilot 按照固定的、可复现的流程,从 start.spring.io 拉取模板并落地一个开箱即用的 Spring Boot 项目骨架。阅读本文后,你将掌握该技能的完整执行步骤、每一步背后的参数含义与配置原理,并能结合docker-compose一键拉起 Redis、PostgreSQL、MongoDB 三套基础设施,直接进入业务开发。
Skill 概述:它是谁,位于哪里
该技能以 Agent Skills 规范组织,是仓库中一个自包含的文件夹,核心指令文件为 skills/create-spring-boot-java-project/SKILL.md。文件开头的 YAML frontmatter 声明了它的元信息:
--- name: create-spring-boot-java-project description: 'Create Spring Boot Java Project Skeleton' ---其中name是该技能的唯一标识,description则用于告诉 Copilot 何时应该加载它——当用户提出"创建 Spring Boot 项目骨架"类的请求时触发。
在仓库的生态中,这个技能并不是孤立的:它被 plugins/java-development/plugin.json 打包进了java-development插件,与java-docs、java-junit、java-springboot三个技能共同构成一套 Java 开发工作流。从 plugins/java-development/README.md 可以看到,安装该插件后它会暴露一个斜杠命令/java-development:create-spring-boot-java-project。安装方式有两种:
# 方式一:直接安装整个 java-development 插件 copilot plugin install java-development@awesome-copilot # 方式二:只安装这一个技能(需要 GitHub CLI 2.90.0+) gh skills install github/awesome-copilot create-spring-boot-java-project技能索引文档 docs/README.skills.md 中同样登记了该技能及其安装命令。安装完成后,Copilot 会在检测到相关需求时按 skills/create-spring-boot-java-project/SKILL.md 中的指令逐步执行。
环境准备:Java 21、Docker 与 Docker Compose
技能在开始前会先确认宿主机的软件环境,因为整个骨架依赖 Java 21 编译运行、依赖 Docker 与 Docker Compose 在本地启动中间件服务。对应的前置清单为:
- Java 21
- Docker
- Docker Compose
其中 Java 版本是硬性约束:后续通过 start.spring.io 生成项目时指定的就是javaVersion=21,并依赖 Maven Wrapper(mvnw)执行构建,因此机器上必须能运行 Java 21。技能给出的第一步检查命令是:
java -version如果输出中的版本号不是 21.x,说明本地 JDK 版本不匹配,需要先切换或安装对应版本的 JDK 再继续。Docker 与 Docker Compose 则用于提供骨架所集成的 Redis、PostgreSQL、MongoDB 三个中间件实例(对应技能末尾的docker-compose步骤)。
三个可定制点:artifactId、packageName 与 bootVersion
在真正执行下载之前,技能明确列出了三个"按需修改"的参数位,它们都集中在下载模板的命令中:
artifactId:Maven 坐标中的项目名,也是解压后的目录名;packageName:Java 基础包名;bootVersion:Spring Boot 版本号。
技能原文使用${input:projectName:demo-java}这样的占位语法:projectName是 Copilot CLI 的输入变量名,demo-java是默认值。执行时 Copilot 会向用户询问项目名称,用户若不指定则回落到demo-java。这一点非常关键——后续unzip、cd等所有依赖目录名的命令都与该变量保持一致,所以项目名只需要改一处即可全局生效。
从 start.spring.io 拉取项目模板
技能的核心动作是通过 start.spring.io 的 HTTP 接口以表单参数的方式生成项目压缩包。完整命令如下:
curl https://start.spring.io/starter.zip \ -d artifactId=${input:projectName:demo-java} \ -d bootVersion=3.4.5 \ -d dependencies=lombok,configuration-processor,web,data-jpa,postgresql,data-redis,data-mongodb,validation,cache,testcontainers \ -d javaVersion=21 \ -d packageName=com.example \ -d packaging=jar \ -d type=maven-project \ -o starter.zip注意curl -d意味着这是一次 POST 请求,-o starter.zip将响应体(一个 ZIP 文件)落盘。每个参数的含义如下表所示:
| 参数 | 取值示例 | 说明 |
|---|---|---|
artifactId | demo-java | Maven 项目坐标中的 artifactId,决定工程目录名 |
bootVersion | 3.4.5 | Spring Boot 版本,可在此处升级 |
dependencies | 逗号分隔列表 | 需要预置的 Spring Boot Starter 与依赖 |
javaVersion | 21 | 目标 Java 版本 |
packageName | com.example | Java 基础包名 |
packaging | jar | 打包方式 |
type | maven-project | 构建工具类型(Maven 工程) |
dependencies里预置了十个依赖,它们决定了骨架自带的 Starter 组合:
| 依赖 | 作用 |
|---|---|
lombok | 通过注解消除 getter/setter、构造器等样板代码 |
configuration-processor | 为@ConfigurationProperties配置类生成元数据,便于 IDE 提示 |
web | Spring MVC 与内嵌 Tomcat,提供 REST API 能力 |
data-jpa | Spring Data JPA + Hibernate 对象关系映射 |
postgresql | PostgreSQL JDBC 驱动 |
data-redis | Spring Data Redis,集成 Redis 缓存/存储 |
data-mongodb | Spring Data MongoDB,集成文档型数据库 |
validation | Bean Validation(JSR-380),提供@Valid、@NotNull等校验注解 |
cache | Spring Cache 抽象 |
testcontainers | Testcontainers 集成测试容器支持 |
从依赖清单可以推断,这是一个面向"关系型 + 缓存 + 文档型"混合数据场景的通用后端骨架,正好对应技能后续在application.properties中给出的三类数据库连接配置。
解压、清理与进入项目目录
模板下载完成后是三个串行的小步骤,分别完成解压、删除压缩包、进入工程根目录:
unzip starter.zip -d ./${input:projectName:demo-java} rm -f starter.zip cd ${input:projectName:demo-java}unzip -d指定了解压目标目录(即上一步确定的项目名);随后删除starter.zip保持工作区干净;最后cd进入项目根目录,后续所有配置文件的修改都在此目录内完成。至此,一个包含pom.xml、mvnw、src/等标准结构的 Maven 工程已经就绪。
补充依赖:SpringDoc 与 ArchUnit
骨架自带的基础依赖并不包含 API 文档与架构约束测试能力,因此技能要求向pom.xml中插入两个额外依赖:
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.8.6</version> </dependency> <dependency> <groupId>com.tngtech.archunit</groupId> <artifactId>archunit-junit5</artifactId> <version>1.2.1</version> <scope>test</scope> </dependency>springdoc-openapi-starter-webmvc-ui(2.8.6):为基于 Spring MVC 的应用自动生成 OpenAPI 3 规范,并内置 Swagger UI 界面,配合下文application.properties中的 SpringDoc 配置即可开箱使用;archunit-junit5(1.2.1):ArchUnit 的 JUnit 5 集成,用于在测试阶段以代码方式断言包结构、依赖方向、命名规范等架构规则,<scope>test</scope>表明它只参与测试生命周期。
application.properties 配置详解:四组配置各司其职
技能要求向application.properties依次插入四组配置。由于使用了web、data-jpa、data-redis、data-mongodb等 Starter,这些配置会由对应的自动配置类读取并建立连接。
SpringDoc 配置
# SpringDoc configurations springdoc.swagger-ui.doc-expansion=none springdoc.swagger-ui.operations-sorter=alpha springdoc.swagger-ui.tags-sorter=alphadoc-expansion=none:Swagger UI 页面默认折叠所有接口分组,避免一打开页面就铺满内容;operations-sorter=alpha:同一分组下的操作(HTTP 接口)按字母序排列;tags-sorter=alpha:接口标签(分组)按字母序排列。
三者共同保证 Swagger UI 以整洁、可预测的顺序展示 API 文档。
Redis 配置
# Redis configurations spring.data.redis.host=localhost spring.data.redis.port=6379 spring.data.redis.password=rootroot对应 Spring Data Redis 的连接要素:主机localhost、端口6379(Redis 默认端口)、密码rootroot。注意这里是 Spring Boot 3.x 引入的新命名空间spring.data.redis.*(旧版为spring.redis.*),与技能指定的 Boot 3.4.5 相匹配。密码必须与后续docker-compose中 Redis 服务的认证口令保持一致。
JPA / PostgreSQL 配置
# JPA configurations spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.username=postgres spring.datasource.password=rootroot spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=truedriver-class-name:显式声明 PostgreSQL 驱动类(由postgresql依赖提供);datasource.url:JDBC 连接串,指向本机5432端口的postgres数据库(PostgreSQL 默认数据库名);username/password:连接账号postgres与密码rootroot,与 docker-compose 中的 PostgreSQL 初始化参数对应;ddl-auto=update:让 Hibernate 根据实体类自动更新数据库表结构。注意这是开发期常用策略,生产环境通常建议改为validate或交由迁移工具管理;show-sql=true与hibernate.format_sql=true:在控制台打印 SQL 并对多行 SQL 进行格式化缩进,方便开发期排查 ORM 生成的语句。
MongoDB 配置
# MongoDB configurations spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.authentication-database=admin spring.data.mongodb.username=root spring.data.mongodb.password=rootroot spring.data.mongodb.database=testhost/port:MongoDB 服务地址与默认端口27017;authentication-database=admin:认证库指向admin——这与 docker-compose 中通过MONGO_INITDB_ROOT_USERNAME/MONGO_INITDB_ROOT_PASSWORD创建 root 用户的行为一致,root 用户的认证库正是admin;username/password:使用 root 账号root/rootroot进行认证;database=test:默认连接的数据库名(与 compose 中MONGO_INITDB_DATABASE对应)。
docker-compose.yaml:一键拉起三套中间件
为了让上面的配置真正可运行,技能要求在项目根目录创建docker-compose.yaml,并给出三个服务的明确规格:
| 服务 | 镜像 | 关键要求 |
|---|---|---|
| redis | redis:6 | 密码rootroot;端口映射6379:6379;数据卷./redis_data→/data |
| postgresql | postgresql:17 | 密码rootroot;端口映射5432:5432;数据卷./postgres_data→/var/lib/postgresql/data |
| mongo | mongo:8 | 初始化 root 用户名root、密码rootroot;端口映射27017:27017;数据卷./mongo_data→/data/db |
将上述规格落到实际配置(官方 PostgreSQL 镜像名为postgres,服务名按技能原文保留为postgresql),一份可直接使用的完整示例为:
services: redis: image: redis:6 container_name: redis command: redis-server --requirepass rootroot ports: - "6379:6379" volumes: - ./redis_data:/data postgresql: image: postgres:17 container_name: postgresql environment: POSTGRES_PASSWORD: rootroot ports: - "5432:5432" volumes: - ./postgres_data:/var/lib/postgresql/data mongo: image: mongo:8 container_name: mongo environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: rootroot MONGO_INITDB_DATABASE: test ports: - "27017:27017" volumes: - ./mongo_data:/data/db几点实践说明:
- 官方
redis镜像本身不提供密码环境变量,因此需要像示例中那样通过command: redis-server --requirepass rootroot传入启动参数,才能让服务端开启密码认证并匹配application.properties中的spring.data.redis.password; - PostgreSQL 的
POSTGRES_PASSWORD=rootroot会同时初始化超级用户postgres的密码,与 JPA 数据源配置完全对应; - MongoDB 的
MONGO_INITDB_ROOT_USERNAME/MONGO_INITDB_ROOT_PASSWORD会在容器首次启动时创建认证于admin库的 root 用户,MONGO_INITDB_DATABASE则预创建test数据库,分别对应 MongoDB 配置段中的authentication-database=admin与database=test; - 三个服务都将数据落在宿主机当前目录的子文件夹中(
./redis_data、./postgres_data、./mongo_data),容器删除后数据仍然保留。
.gitignore:排除数据卷目录
由于三个数据卷目录都是本地开发产生的数据库文件,绝不应进入版本控制,技能要求把它们加入.gitignore:
redis_data postgres_data mongo_data这一步保证了仓库只包含代码与配置,不包含运行期数据,避免脏提交和大文件入库。
验证与运行:测试通过后再启动
技能以一条 Maven 命令作为质量闸门,验证整个骨架(包括新增依赖与配置)是否构建正常:
./mvnw clean test./mvnw是 start.spring.io 生成的 Maven Wrapper,无需本地预装 Maven;clean test会清空旧产物、编译源码、执行测试。由于 SpringDoc 依赖、ArchUnit 依赖及四组配置都已就位,这一步会验证:依赖坐标可解析、配置类能加载、上下文能够装配。测试通过后,即可进入可选运行阶段:
docker-compose up -d # 后台启动 Redis/PostgreSQL/MongoDB ./mvnw spring-boot:run # 启动 Spring Boot 应用 docker-compose rm -sf # 停止并强制移除三套中间件容器启动后可通过 Swagger UI 访问接口文档——SpringDoc 配置中doc-expansion=none等选项的效果此时可以直接在页面上验证。
为什么是 "Let's do this step by step"
技能的末尾只有一句话:"Let's do this step by step"。这并非可有可无的收尾,而是对 Copilot 的执行模式约定:它要求 Agent 不要一次性执行完所有命令,而是按"检查 Java → 下载模板 → 解压 → 补依赖 → 写配置 → 写 compose → 测试 → 运行"的顺序分步推进,每完成一步与用户确认或汇报后再进入下一步。这种渐进式执行一方面避免长链路中某一步失败后难以定位,另一方面让用户在项目名、版本等关键决策点有机会介入修改——这与前文${input:projectName:demo-java}的交互式占位语法是一脉相承的设计。
从技能整体设计看,它体现的是一条"可复制、可验证"的脚手架思路:参数集中在单个命令中便于定制,配置与基础设施通过docker-compose保持本地一致,测试命令作为验收标准,最后以交互式分步执行降低出错概率。
延伸阅读与源码依据
- 技能本体:skills/create-spring-boot-java-project/SKILL.md
- 技能打包与安装信息:plugins/java-development/plugin.json、plugins/java-development/README.md
- 技能索引与安装命令:docs/README.skills.md
- 配套的 Spring Boot 最佳实践技能:skills/java-springboot/SKILL.md
如果你希望将骨架进一步规范化,例如引入按领域分包、构造器注入、DTO 隔离等工程实践,可以参考同仓库的java-springboot技能;若使用 Kotlin 技术栈,仓库还提供了对应的create-spring-boot-kotlin-project技能,两者流程结构一致。
【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考