Config Project (Kotlin)
Overview
Executar setup determinístico e idempotente para bootstrap de projeto Kotlin com Spring Boot, organizado em multi-módulo Gradle para suportar Clean Architecture.
Equivalente ao config-project do stack TypeScript (TurboRepo + NestJS), adaptado para o ecossistema Kotlin/Gradle.
Estrutura alvo
project-root/
├── build.gradle.kts # Root build com plugins e dependências globais
├── settings.gradle.kts # Inclui módulos
├── gradle.properties
├── gradlew / gradlew.bat
├── docker-compose.yml
├── .env / .env.example
├── .gitignore
├── apps/
│ └── backend-kt/ # Spring Boot application
│ ├── build.gradle.kts
│ └── src/main/kotlin/com/example/
│ ├── Application.kt
│ └── config/
│ ├── CorsConfig.kt
│ └── SecurityConfig.kt
└── packages/
└── shared/ # Shared kernel (domain base)
├── build.gradle.kts
└── src/main/kotlin/com/example/shared/
Workflow
- Detectar se já existe estrutura Gradle no diretório atual.
- Se ausente, inicializar projeto Gradle com
gradle initou template. - Configurar
settings.gradle.ktscom módulos (apps:backend-kt,packages:shared). - Criar app Spring Boot em
apps/backend-kt/com:build.gradle.ktscom dependências Spring Boot, Kotlin, JPA.Application.ktcom@SpringBootApplication.CorsConfig.ktcom CORS habilitado.application.ymlcom configuração base.
- Criar módulo shared em
packages/shared/com:build.gradle.ktscomo biblioteca Kotlin pura (sem Spring).
- Configurar
.env,.env.example,.gitignoreedocker-compose.yml. - Garantir que backend depende do shared no
build.gradle.kts. - Validar build:
./gradlew build.
Configuração base do build.gradle.kts (root)
plugins {
kotlin("jvm") version "1.9.25"
kotlin("plugin.spring") version "1.9.25" apply false
id("org.springframework.boot") version "3.3.0" apply false
id("io.spring.dependency-management") version "1.1.5" apply false
}
allprojects {
group = "com.example"
version = "0.0.1-SNAPSHOT"
repositories { mavenCentral() }
}
subprojects {
apply(plugin = "org.jetbrains.kotlin.jvm")
kotlin { jvmToolchain(21) }
}
Configuração do settings.gradle.kts
rootProject.name = "project-name"
include("apps:backend-kt")
include("packages:shared")
Commands
Fluxo padrão:
node config-project-kt/scripts/project-init-kt.mjs
Se instalado como submódulo:
node .agents/skills/config-project-kt/scripts/project-init-kt.mjs
Customizar namespace:
node config-project-kt/scripts/project-init-kt.mjs --scope @myorg
Simular sem alterar disco:
node config-project-kt/scripts/project-init-kt.mjs --dry-run
Customizar backend path e porta:
node config-project-kt/scripts/project-init-kt.mjs --backend-path apps/api-kt --backend-port 4100
Resources
scripts/project-init-kt.mjs: script principal de bootstrap.references/bootstrap-contract-kt.md: contrato dos arquivos gerados.- Log local de execução:
.log/skills.log.
Notes
- O setup é idempotente: pula etapas já atendidas.
- Módulos adicionais podem ser incluídos depois em
settings.gradle.kts. - O backend depende do shared via
implementation(project(":packages:shared")). - Não usar Spring no módulo shared (manter domínio puro).
- Após gerar, executar
gradle wrapper --gradle-version 8.8se o wrapper não existir.
References
Consultar references/bootstrap-contract-kt.md para contrato detalhado.
Consultar ../skills-standards.md para convenção global de nomenclatura (seção Kotlin).
Global Standards
- Consultar
../skills-standards.mdpara padrões globais de nomenclatura e convenções gerais entre skills.