import org.springframework.boot.gradle.tasks.bundling.BootJar val jooqVersion by extra("3.19.22") val testcontainersVersion by extra("1.20.6") val flywayVersion by extra("11.4.0") plugins { java `java-library` jacoco id("org.springframework.boot") version "3.3.9" id("io.spring.dependency-management") version "1.1.7" id("org.springdoc.openapi-gradle-plugin") version "1.9.0" id("pmd") id("org.jooq.jooq-codegen-gradle") version "3.19.22" id("com.diffplug.spotless") version "7.0.2" } sourceSets { main { java { srcDir("build/generated-sources/jooq") } } test { java { srcDir("build/generated-sources/jooq") } } } group = "com.zl.mjga" version = "1.0.0" description = "make java great again!" java.sourceCompatibility = JavaVersion.VERSION_21 configurations { compileOnly { extendsFrom(configurations.annotationProcessor.get()) } } dependencies { implementation("org.springframework.boot:spring-boot-starter-actuator") implementation("org.springframework.boot:spring-boot-starter-jooq") implementation("org.springframework.boot:spring-boot-starter-mail") implementation("org.springframework.boot:spring-boot-starter-cache") implementation("org.springframework.boot:spring-boot-starter-quartz") implementation("org.springframework.boot:spring-boot-starter-security") implementation("org.springframework.boot:spring-boot-starter-validation") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-aop") implementation("org.apache.commons:commons-lang3:3.17.0") implementation("org.apache.commons:commons-collections4:4.4") implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0") implementation("io.minio:minio:8.5.17") implementation("org.jooq:jooq-meta:$jooqVersion") implementation("com.auth0:java-jwt:4.4.0") implementation("org.flywaydb:flyway-core:$flywayVersion") implementation("org.flywaydb:flyway-database-postgresql:$flywayVersion") implementation("com.github.ben-manes.caffeine:caffeine:3.2.0") implementation("org.springframework.boot:spring-boot-starter-quartz") implementation("dev.langchain4j:langchain4j:1.0.0") implementation("dev.langchain4j:langchain4j-open-ai:1.0.0") implementation("dev.langchain4j:langchain4j-pgvector:1.0.1-beta6") implementation("dev.langchain4j:langchain4j-community-zhipu-ai:1.0.1-beta6") implementation("dev.langchain4j:langchain4j-document-parser-apache-tika:1.1.0-beta7") implementation("dev.langchain4j:langchain4j-document-loader-amazon-s3:1.1.0-beta7") implementation("io.projectreactor:reactor-core:3.7.6") testImplementation("org.testcontainers:junit-jupiter:$testcontainersVersion") testImplementation("org.testcontainers:postgresql:$testcontainersVersion") testImplementation("org.testcontainers:testcontainers-bom:$testcontainersVersion") runtimeOnly("org.postgresql:postgresql") compileOnly("org.projectlombok:lombok") developmentOnly("org.springframework.boot:spring-boot-devtools") testImplementation("org.springframework.boot:spring-boot-testcontainers") testImplementation("org.springframework.boot:spring-boot-starter-webflux") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.security:spring-security-test") jooqCodegen("org.postgresql:postgresql") jooqCodegen("org.jooq:jooq-codegen:$jooqVersion") jooqCodegen("org.jooq:jooq-meta-extensions:$jooqVersion") annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") annotationProcessor("org.projectlombok:lombok") api("org.jspecify:jspecify:1.0.0") } tasks.withType { archiveFileName.set("backend.jar") } tasks.withType { useJUnitPlatform() } tasks.test { finalizedBy(tasks.jacocoTestReport) // report is always generated after tests run } tasks.jacocoTestReport { dependsOn(tasks.test) // tests are required to run before generating the report } jacoco { toolVersion = "0.8.13" reportsDirectory.set(layout.buildDirectory.dir("reports/jacoco")) } pmd { sourceSets = listOf(java.sourceSets.findByName("main")) isConsoleOutput = true toolVersion = "7.15.0" rulesMinimumPriority.set(5) ruleSetFiles = files("pmd-rules.xml") } spotless { format("misc") { // define the files to apply `misc` to target("*.gradle.kts", "*.md", ".gitignore") // define the steps to apply to those files trimTrailingWhitespace() leadingTabsToSpaces() endWithNewline() } java { googleJavaFormat("1.28.0").reflowLongStrings() formatAnnotations() } kotlinGradle { target("*.gradle.kts") // default target for kotlinGradle ktlint() // or ktfmt() or prettier() } } jooq { configuration { generator { database { includes = ".*" // excludes = "qrtz_.*" name = "org.jooq.meta.extensions.ddl.DDLDatabase" properties { property { key = "scripts" value = "src/main/resources/db/migration/*.sql" } property { key = "sort" value = "semantic" } property { key = "unqualifiedSchema" value = "none" } property { key = "defaultNameCase" value = "lower" } property { key = "logExecutedQueries" value = "true" } property { key = "logExecutionResults" value = "true" } } forcedTypes { forcedType { isJsonConverter = true includeTypes = "(?i:JSON|JSONB)" } } } generate { isDaos = true isRecords = true isDeprecated = false isImmutablePojos = false isFluentSetters = true isSpringAnnotations = true isSpringDao = true } target { packageName = "org.jooq.generated" } } } }