plugins { id 'java' id 'org.springframework.boot' version '3.2.4' id 'io.spring.dependency-management' version '1.1.3' id 'org.springdoc.openapi-gradle-plugin' version '1.8.0' id "io.swagger.swaggerhub" version "1.3.2" id 'edu.sc.seis.launch4j' version '3.0.5' id 'com.diffplug.spotless' version '6.25.0' id 'com.github.jk1.dependency-license-report' version '2.6' } import com.github.jk1.license.render.* group = 'stirling.software' version = '0.25.3' //17 is lowest but we support and recommend 21 sourceCompatibility = '17' repositories { mavenCentral() } licenseReport { renderers = [new JsonReportRenderer()] } sourceSets { main { java { if (System.getenv('DOCKER_ENABLE_SECURITY') == 'false') { exclude 'stirling/software/SPDF/config/security/**' exclude 'stirling/software/SPDF/controller/api/UserController.java' exclude 'stirling/software/SPDF/controller/web/AccountWebController.java' exclude 'stirling/software/SPDF/model/ApiKeyAuthenticationToken.java' exclude 'stirling/software/SPDF/model/Authority.java' exclude 'stirling/software/SPDF/model/PersistentLogin.java' exclude 'stirling/software/SPDF/model/User.java' exclude 'stirling/software/SPDF/repository/**' } } } } openApi { apiDocsUrl = "http://localhost:8080/v1/api-docs" outputDir = file("$projectDir") outputFileName = "SwaggerDoc.json" } launch4j { icon = "${projectDir}/src/main/resources/static/favicon.ico" outfile="Stirling-PDF.exe" headerType="console" jarTask = tasks.bootJar errTitle="Encountered error, Do you have Java 21?" downloadUrl="https://download.oracle.com/java/21/latest/jdk-21_windows-x64_bin.exe" variables=["BROWSER_OPEN=true", "ENDPOINTS_GROUPS_TO_REMOVE=CLI"] jreMinVersion="17" mutexName="Stirling-PDF" windowTitle="Stirling-PDF" messagesStartupError="An error occurred while starting Stirling-PDF" //messagesJreNotFoundError="This application requires a Java Runtime Environment, Please download Java 17." messagesJreVersionError="You are running the wrong version of Java, Please download Java 21." messagesLauncherError="Java is corrupted. Please uninstall and then install Java 21." messagesInstanceAlreadyExists="Stirling-PDF is already running." } spotless { java { target project.fileTree('src/main/java') googleJavaFormat('1.19.1').aosp().reorderImports(false) importOrder('java', 'javax', 'org', 'com', 'net', 'io') toggleOffOn() trimTrailingWhitespace() indentWithSpaces() endWithNewline() } } dependencies { //security updates implementation 'ch.qos.logback:logback-classic:1.5.3' implementation 'ch.qos.logback:logback-core:1.5.3' implementation 'org.springframework:spring-webmvc:6.1.5' implementation("io.github.pixee:java-security-toolkit:1.1.3") implementation 'org.yaml:snakeyaml:2.2' // Exclude Tomcat and include Jetty implementation('org.springframework.boot:spring-boot-starter-web:3.2.4') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' } implementation 'org.springframework.boot:spring-boot-starter-jetty:3.2.4' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.2.4' if (System.getenv('DOCKER_ENABLE_SECURITY') != 'false') { implementation 'org.springframework.boot:spring-boot-starter-security:3.2.4' implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.2.RELEASE' implementation "org.springframework.boot:spring-boot-starter-data-jpa:3.2.4" implementation 'org.springframework.boot:spring-boot-starter-oauth2-client:3.2.4' //2.2.x requires rebuild of DB file.. need migration path implementation "com.h2database:h2:2.1.214" } testImplementation 'org.springframework.boot:spring-boot-starter-test:3.2.4' // Batik implementation 'org.apache.xmlgraphics:batik-all:1.17' // TwelveMonkeys implementation 'com.twelvemonkeys.imageio:imageio-batik:3.10.1' implementation 'com.twelvemonkeys.imageio:imageio-bmp:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-hdr:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-icns:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-iff:3.10.1' implementation 'com.twelvemonkeys.imageio:imageio-jpeg:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-pcx:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-pict:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-pnm:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-psd:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-sgi:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-tga:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-thumbsdb:3.10.1' implementation 'com.twelvemonkeys.imageio:imageio-tiff:3.10.1' implementation 'com.twelvemonkeys.imageio:imageio-webp:3.10.1' // implementation 'com.twelvemonkeys.imageio:imageio-xwd:3.10.1' implementation 'commons-io:commons-io:2.16.1' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' //general PDF // https://mvnrepository.com/artifact/com.opencsv/opencsv implementation ('com.opencsv:opencsv:5.9') { exclude group: 'commons-logging', module: 'commons-logging' } implementation ('org.apache.pdfbox:pdfbox:3.0.2'){ exclude group: 'commons-logging', module: 'commons-logging' } implementation ('org.apache.pdfbox:xmpbox:3.0.2'){ exclude group: 'commons-logging', module: 'commons-logging' } implementation 'org.bouncycastle:bcprov-jdk18on:1.77' implementation 'org.bouncycastle:bcpkix-jdk18on:1.77' implementation 'org.springframework.boot:spring-boot-starter-actuator:3.2.4' implementation 'io.micrometer:micrometer-core:1.12.4' implementation group: 'com.google.zxing', name: 'core', version: '3.5.3' // https://mvnrepository.com/artifact/org.commonmark/commonmark implementation 'org.commonmark:commonmark:0.22.0' implementation 'org.commonmark:commonmark-ext-gfm-tables:0.22.0' // https://mvnrepository.com/artifact/com.github.vladimir-bukhtoyarov/bucket4j-core implementation 'com.github.vladimir-bukhtoyarov:bucket4j-core:7.6.0' implementation 'com.fathzer:javaluator:3.0.3' developmentOnly("org.springframework.boot:spring-boot-devtools:3.2.4") compileOnly 'org.projectlombok:lombok:1.18.32' annotationProcessor 'org.projectlombok:lombok:1.18.32' } tasks.withType(JavaCompile).configureEach { dependsOn 'spotlessApply' } compileJava { options.compilerArgs << '-parameters' } task writeVersion { def propsFile = file('src/main/resources/version.properties') def props = new Properties() props.setProperty('version', version) props.store(propsFile.newWriter(), null) } swaggerhubUpload { //dependsOn generateOpenApiDocs // Depends on your task generating Swagger docs api 'Stirling-PDF' // The name of your API on SwaggerHub owner 'Frooodle' // Your SwaggerHub username (or organization name) version project.version // The version of your API inputFile './SwaggerDoc.json' // The path to your Swagger docs token "${System.getenv('SWAGGERHUB_API_KEY')}" // Your SwaggerHub API key, passed as an environment variable oas '3.0.0' // The version of the OpenAPI Specification you're using } jar { enabled = false manifest { attributes 'Implementation-Title': 'Stirling-PDF', 'Implementation-Version': project.version } } tasks.named('test') { useJUnitPlatform() } task printVersion { println project.version }