plugins { id 'java' id 'org.springframework.boot' version '4.0.2' id 'io.spring.dependency-management' version '1.1.7' id 'org.hibernate.orm' version '7.2.4.Final' id 'com.github.ben-manes.versions' version '0.53.0' id 'jacoco' } group = 'org.booklore' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(25) } } repositories { mavenCentral() } configurations { compileOnly { extendsFrom annotationProcessor } } dependencies { // --- Spring Boot --- implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-configuration-processor' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-mail' implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' // --- Reactive Streams --- implementation 'io.projectreactor:reactor-core' // --- Database & Migration --- implementation 'org.mariadb.jdbc:mariadb-java-client:3.5.7' implementation 'org.springframework.boot:spring-boot-starter-flyway' implementation 'org.flywaydb:flyway-mysql:12.0.1' // --- Security & Authentication --- implementation 'io.jsonwebtoken:jjwt-api:0.13.0' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.13.0' runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.13.0' // --- Lombok (For Clean Code) --- compileOnly 'org.projectlombok:lombok:1.18.42' annotationProcessor 'org.projectlombok:lombok:1.18.42' // --- Book & Image Processing --- implementation 'org.apache.pdfbox:pdfbox:3.0.6' implementation 'org.apache.pdfbox:pdfbox-io:3.0.6' implementation 'org.apache.pdfbox:xmpbox:3.0.6' implementation 'org.apache.pdfbox:jbig2-imageio:3.0.4' // Required for JPEG2000 support in PDFBox (not covered by TwelveMonkeys) implementation 'com.github.jai-imageio:jai-imageio-core:1.4.0' implementation 'com.github.jai-imageio:jai-imageio-jpeg2000:1.4.0' // --- TwelveMonkeys ImageIO --- implementation 'com.twelvemonkeys.imageio:imageio-jpeg:3.13.0' implementation 'com.twelvemonkeys.imageio:imageio-tiff:3.13.0' implementation 'com.twelvemonkeys.imageio:imageio-webp:3.13.0' implementation 'com.twelvemonkeys.imageio:imageio-bmp:3.13.0' implementation 'io.documentnode:epub4j-core:4.2.3' // --- Audio Metadata (Audiobook Support) --- implementation 'net.jthink:jaudiotagger:3.0.1' // --- UNRAR Support --- implementation 'com.github.junrar:junrar:7.5.7' // --- JSON & Web Scraping --- implementation 'org.jsoup:jsoup:1.22.1' // --- Mapping (DTOs & Entities) --- implementation 'org.mapstruct:mapstruct:1.6.3' annotationProcessor 'org.mapstruct:mapstruct-processor:1.6.3' // --- API Documentation --- implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.1' implementation 'org.apache.commons:commons-compress:1.28.0' implementation 'org.tukaani:xz:1.11' // Required by commons-compress for 7z support implementation 'org.apache.commons:commons-text:1.15.0' // --- XML Support (JAXB) --- implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.5' runtimeOnly 'org.glassfish.jaxb:jaxb-runtime:4.0.6' // --- Template Engine --- implementation 'org.freemarker:freemarker:2.3.34' // --- Jackson 3 --- implementation platform('tools.jackson:jackson-bom:3.0.4') implementation 'tools.jackson.core:jackson-core' implementation 'tools.jackson.core:jackson-databind' implementation 'tools.jackson.module:jackson-module-blackbird' // --- Jackson 2 (Compatibility) --- // jackson-annotations version is managed by Jackson 3 BOM (requires 2.20+) implementation 'com.fasterxml.jackson.core:jackson-annotations' // --- Caching --- implementation 'org.springframework.boot:spring-boot-starter-cache' implementation 'com.github.ben-manes.caffeine:caffeine:3.2.3' // --- Test Dependencies --- testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-test-autoconfigure' testImplementation 'org.assertj:assertj-core:3.27.7' testImplementation "org.mockito:mockito-inline:5.2.0" testRuntimeOnly 'com.h2database:h2' } hibernate { enhancement { enableAssociationManagement = true } } test { useJUnitPlatform() jvmArgs("-XX:+EnableDynamicAgentLoading") finalizedBy jacocoTestReport } jacocoTestReport { dependsOn test reports { xml.required = true html.required = true } } bootRun { def debug = System.getenv('REMOTE_DEBUG_ENABLED') if (debug.equals("true")) { jvmArgs("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005") } } bootJar { mainClass = 'org.booklore.BookloreApplication' }