mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2026-09-02 21:03:34 +03:00
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
92 lines
4.8 KiB
Groovy
92 lines
4.8 KiB
Groovy
// Configure bootRun to disable it or point to a main class
|
|
bootRun {
|
|
enabled = false
|
|
}
|
|
dependencies {
|
|
// Security-hardening utilities (zip-slip, SSRF, filename sanitization, command injection).
|
|
// Declared as api here so core + proprietary (which depend on common) get it transitively,
|
|
// keeping it off modules that don't need it (e.g. saas).
|
|
api 'io.github.pixee:java-security-toolkit:1.2.3'
|
|
api "com.google.guava:guava:${guavaVersion}"
|
|
api 'org.springframework.boot:spring-boot-starter-webmvc'
|
|
api 'org.springframework.boot:spring-boot-starter-aspectj'
|
|
api 'com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:20260313.1'
|
|
api 'com.fathzer:javaluator:3.0.6'
|
|
api 'com.posthog.java:posthog:1.2.0'
|
|
api "org.apache.commons:commons-lang3:${commonsLang3}"
|
|
api 'com.drewnoakes:metadata-extractor:2.21.0' // Image metadata extractor
|
|
api 'com.vladsch.flexmark:flexmark-html2md-converter:0.64.8'
|
|
api "org.apache.pdfbox:pdfbox:$pdfboxVersion"
|
|
api "org.apache.pdfbox:pdfbox-io:$pdfboxVersion"
|
|
api "org.apache.pdfbox:xmpbox:$pdfboxVersion"
|
|
api "org.apache.pdfbox:preflight:$pdfboxVersion"
|
|
api 'com.github.junrar:junrar:8.0.0' // RAR archive support for CBR files
|
|
api 'jakarta.servlet:jakarta.servlet-api:6.1.0'
|
|
api 'org.snakeyaml:snakeyaml-engine:3.1.1'
|
|
api "org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.3"
|
|
// Simple Java Mail for EML/MSG parsing (replaces direct Angus Mail usage)
|
|
api 'org.simplejavamail:simple-java-mail:9.3.2'
|
|
// MSG file support; exclude commons-math3 (only HSSF/formula needs it, MSG parsing doesn't)
|
|
api('org.simplejavamail:outlook-module:9.3.2') {
|
|
exclude group: 'org.apache.commons', module: 'commons-math3'
|
|
}
|
|
api 'jakarta.mail:jakarta.mail-api:2.1.5'
|
|
runtimeOnly 'org.eclipse.angus:angus-mail:2.0.5'
|
|
|
|
// Tabula table extraction — used by the shared PDF parser and directly by downstream modules.
|
|
// api-scoped so downstream modules (core, proprietary) retain it on their compile classpath.
|
|
api ('technology.tabula:tabula:1.0.5') {
|
|
exclude group: 'org.slf4j', module: 'slf4j-simple'
|
|
exclude group: 'org.bouncycastle', module: 'bcprov-jdk15on'
|
|
exclude group: 'com.google.code.gson', module: 'gson'
|
|
}
|
|
|
|
api "com.stirling:jpdfium:${jpdfiumVersion}"
|
|
|
|
// -PjpdfiumPlatforms=auto|all|none|<csv of linux-x64,linux-arm64,linux-musl-x64,linux-musl-arm64,darwin-x64,darwin-arm64,windows-x64> (windows-arm64 natives not published yet)
|
|
def jpdfiumPlatformsProp = (project.findProperty('jpdfiumPlatforms') ?: 'auto').toString().trim()
|
|
def jpdfiumAllPlatforms = ['linux-x64', 'linux-arm64', 'linux-musl-x64', 'linux-musl-arm64', 'darwin-x64', 'darwin-arm64', 'windows-x64']
|
|
def jpdfiumPlatforms
|
|
if (jpdfiumPlatformsProp == 'auto') {
|
|
def osName = System.getProperty('os.name').toLowerCase()
|
|
def osArch = System.getProperty('os.arch').toLowerCase()
|
|
def isArm64 = osArch.contains('aarch64') || osArch.contains('arm64')
|
|
if (osName.contains('linux')) {
|
|
jpdfiumPlatforms = isArm64 ? ['linux-arm64'] : ['linux-x64']
|
|
} else if (osName.contains('mac')) {
|
|
jpdfiumPlatforms = isArm64 ? ['darwin-arm64'] : ['darwin-x64']
|
|
} else if (osName.contains('win')) {
|
|
if (isArm64) {
|
|
logger.lifecycle("JPDFium natives are not available for windows-arm64; set -PjpdfiumPlatforms=none to skip bundling natives.")
|
|
jpdfiumPlatforms = []
|
|
} else {
|
|
jpdfiumPlatforms = ['windows-x64']
|
|
}
|
|
} else {
|
|
// Fallback: bundle all platforms when host can't be determined
|
|
jpdfiumPlatforms = jpdfiumAllPlatforms
|
|
}
|
|
} else if (jpdfiumPlatformsProp == 'all') {
|
|
jpdfiumPlatforms = jpdfiumAllPlatforms
|
|
} else if (jpdfiumPlatformsProp == 'none') {
|
|
jpdfiumPlatforms = []
|
|
} else {
|
|
jpdfiumPlatforms = jpdfiumPlatformsProp.split(',').collect { it.trim() }.findAll { it }
|
|
}
|
|
def jpdfiumInvalid = jpdfiumPlatforms.findAll { !jpdfiumAllPlatforms.contains(it) }
|
|
if (jpdfiumInvalid) {
|
|
throw new GradleException("Unknown jpdfiumPlatforms value(s): ${jpdfiumInvalid.join(', ')}. " +
|
|
"Valid: ${jpdfiumAllPlatforms.join(', ')}, 'auto', 'all' or 'none'.")
|
|
}
|
|
logger.lifecycle("JPDFium native platforms: ${jpdfiumPlatforms ? jpdfiumPlatforms.join(', ') : 'none'}")
|
|
jpdfiumPlatforms.each { platform ->
|
|
runtimeOnly "com.stirling:jpdfium-natives-${platform}:${jpdfiumVersion}"
|
|
}
|
|
|
|
// Bucket4j (local in-process token bucket for RateLimitStore default impl)
|
|
implementation "com.bucket4j:bucket4j_jdk17-core:${bucket4jVersion}"
|
|
|
|
// ArchUnit: enforces module dependency direction (see ArchitectureTest)
|
|
testImplementation "com.tngtech.archunit:archunit-junit5:${archunitVersion}"
|
|
}
|