plugins { id "java" id "org.springframework.boot" version "3.3.4" id "io.spring.dependency-management" version "1.1.6" 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.6" id "com.diffplug.spotless" version "6.25.0" id "com.github.jk1.dependency-license-report" version "2.9" //id "nebula.lint" version "19.0.3" } import com.github.jk1.license.render.* ext { springBootVersion = "3.3.4" pdfboxVersion = "3.0.3" logbackVersion = "1.5.7" imageioVersion = "3.12.0" lombokVersion = "1.18.34" bouncycastleVersion = "1.78.1" } group = "stirling.software" version = "0.30.1" java { // 17 is lowest but we support and recommend 21 sourceCompatibility = JavaVersion.VERSION_17 } repositories { mavenCentral() maven { url "https://jitpack.io" } maven { url "https://build.shibboleth.net/nexus/content/repositories/releases/" } maven { url 'https://build.shibboleth.net/maven/releases' } } 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/api/DatabaseController.java" exclude "stirling/software/SPDF/controller/web/AccountWebController.java" exclude "stirling/software/SPDF/controller/web/DatabaseWebController.java" exclude "stirling/software/SPDF/model/ApiKeyAuthenticationToken.java" exclude "stirling/software/SPDF/model/AttemptCounter.java" exclude "stirling/software/SPDF/model/Authority.java" exclude "stirling/software/SPDF/model/PersistentLogin.java" exclude "stirling/software/SPDF/model/SessionEntity.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.22.0").aosp().reorderImports(false) importOrder("java", "javax", "org", "com", "net", "io") toggleOffOn() trimTrailingWhitespace() indentWithSpaces() endWithNewline() } } //gradleLint { // rules=['unused-dependency'] // } tasks.wrapper { gradleVersion = "8.7" } //tasks.withType(JavaCompile) { // options.compilerArgs << "-Xlint:deprecation" //} configurations.all { exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat" } dependencies { //security updates implementation "org.springframework:spring-webmvc:6.1.14" implementation("io.github.pixee:java-security-toolkit:1.2.0") // implementation "org.yaml:snakeyaml:2.2" implementation 'com.github.Carleslc.Simple-YAML:Simple-Yaml:1.8.4' // Exclude Tomcat and include Jetty implementation("org.springframework.boot:spring-boot-starter-web:$springBootVersion") implementation "org.springframework.boot:spring-boot-starter-jetty:$springBootVersion" implementation "org.springframework.boot:spring-boot-starter-thymeleaf:$springBootVersion" implementation 'com.posthog.java:posthog:1.1.1' implementation 'com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:20240325.1' if (System.getenv("DOCKER_ENABLE_SECURITY") != "false") { implementation "org.springframework.boot:spring-boot-starter-security:$springBootVersion" runtimeOnly "org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.2.RELEASE" implementation "org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion" implementation "org.springframework.boot:spring-boot-starter-oauth2-client:$springBootVersion" implementation 'org.springframework.security:spring-security-saml2-service-provider:6.3.3' implementation 'com.unboundid.product.scim2:scim2-sdk-client:2.3.5' //2.2.x requires rebuild of DB file.. need migration path runtimeOnly "com.h2database:h2:2.1.214" // implementation "com.h2database:h2:2.2.224" constraints { implementation "org.opensaml:opensaml-core" implementation "org.opensaml:opensaml-saml-api" implementation "org.opensaml:opensaml-saml-impl" } implementation "org.springframework.security:spring-security-saml2-service-provider" implementation 'com.coveo:saml-client:5.0.0' } testImplementation "org.springframework.boot:spring-boot-starter-test:$springBootVersion" // Batik implementation "org.apache.xmlgraphics:batik-all:1.18" // TwelveMonkeys runtimeOnly "com.twelvemonkeys.imageio:imageio-batik:$imageioVersion" runtimeOnly "com.twelvemonkeys.imageio:imageio-bmp:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-hdr:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-icns:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-iff:$imageioVersion" runtimeOnly "com.twelvemonkeys.imageio:imageio-jpeg:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-pcx:$imageioVersion@ // runtimeOnly "com.twelvemonkeys.imageio:imageio-pict:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-pnm:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-psd:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-sgi:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-tga:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-thumbsdb:$imageioVersion" runtimeOnly "com.twelvemonkeys.imageio:imageio-tiff:$imageioVersion" runtimeOnly "com.twelvemonkeys.imageio:imageio-webp:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-xwd:$imageioVersion" implementation "commons-io:commons-io:2.17.0" 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:$pdfboxVersion") { exclude group: "commons-logging", module: "commons-logging" } implementation ("org.apache.pdfbox:xmpbox:$pdfboxVersion") { exclude group: "commons-logging", module: "commons-logging" } implementation 'org.apache.pdfbox:jbig2-imageio:3.0.4' implementation "org.bouncycastle:bcprov-jdk18on:$bouncycastleVersion" implementation "org.bouncycastle:bcpkix-jdk18on:$bouncycastleVersion" implementation "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion" implementation "io.micrometer:micrometer-core:1.13.6" implementation group: "com.google.zxing", name: "core", version: "3.5.3" // https://mvnrepository.com/artifact/org.commonmark/commonmark implementation "org.commonmark:commonmark:0.24.0" implementation "org.commonmark:commonmark-ext-gfm-tables:0.24.0" // https://mvnrepository.com/artifact/com.bucket4j/bucket4j_jdk17 implementation "com.bucket4j:bucket4j_jdk17-core:8.14.0" implementation "com.fathzer:javaluator:3.0.5" developmentOnly("org.springframework.boot:spring-boot-devtools:$springBootVersion") compileOnly "org.projectlombok:lombok:$lombokVersion" annotationProcessor "org.projectlombok:lombok:$lombokVersion" testRuntimeOnly 'org.mockito:mockito-inline:5.2.0' } tasks.withType(JavaCompile).configureEach { options.encoding = "UTF-8" 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 }