plugins { id 'java' id 'org.springframework.boot' version '3.5.15' id 'io.spring.dependency-management' version '1.1.7' } group = 'es.asepeyo' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' // Recuperación de contraseña por email; sin spring.mail.host configurado la app // funciona igual (MailService cae a modo log para desarrollo y tests). implementation 'org.springframework.boot:spring-boot-starter-mail' implementation 'org.liquibase:liquibase-core' runtimeOnly 'org.postgresql:postgresql' // H2 en test para los tests rápidos de servicio/web. La verificación de las // migraciones Liquibase y del mapeo JPA (ddl-auto=validate) se hace contra un // Postgres REAL vía Testcontainers (MigrationIT): H2 no detecta // incompatibilidades de tipos/SQL propias de Postgres (lección aprendida con // el CAST(NULL AS INTEGER) del changeset 003). testRuntimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-testcontainers' testImplementation 'org.testcontainers:junit-jupiter' testImplementation 'org.testcontainers:postgresql' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() }