plugins { alias(libs.plugins.kotlin.jvm) alias(libs.plugins.kotlin.spring) alias(libs.plugins.spring.dependency.management) } description = "vibe_erp platform bootstrap — Spring Boot main, configuration loading, lifecycle. INTERNAL." java { toolchain { languageVersion.set(JavaLanguageVersion.of(21)) } } kotlin { jvmToolchain(21) compilerOptions { freeCompilerArgs.add("-Xjsr305=strict") } } dependencies { api(project(":api:api-v1")) api(project(":platform:platform-persistence")) // for the audit listener wiring api(project(":platform:platform-security")) // for AuthenticationFailedException, JwtIssuer wiring implementation(libs.kotlin.stdlib) implementation(libs.kotlin.reflect) implementation(libs.jackson.module.kotlin) implementation(libs.spring.boot.starter) implementation(libs.spring.boot.starter.web) implementation(libs.spring.boot.starter.data.jpa) // for @EnableJpaRepositories on VibeErpApplication implementation(libs.spring.boot.starter.validation) implementation(libs.spring.boot.starter.actuator) // springdoc-openapi produces /v3/api-docs (the OpenAPI 3 JSON) and // /swagger-ui/index.html from the @RestController classes it scans // at runtime. Lives here alongside MetaController because it's part // of the same "framework self-introspection" story that MetaController // already serves (/_meta/info, /_meta/metadata). PBC modules never // depend on platform-bootstrap so no @RestController leaks into a // plug-in classloader; the scan only sees host controllers. implementation(libs.springdoc.openapi.starter.webmvc.ui) testImplementation(libs.spring.boot.starter.test) testImplementation(libs.junit.jupiter) testImplementation(libs.assertk) } tasks.test { useJUnitPlatform() }