mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2026-09-03 05:10:16 +03:00
# Description of Changes This change centralizes several dependency version declarations into shared Gradle version properties and updates module build files to reference those properties instead of hardcoded version strings. ### What was changed - Added centralized version properties in the root `build.gradle` for: - commons-io - commons-lang3 - rhino - okhttp BOM - gson - guava - bucket4j - archunit - batik - jpdfium - JWT - AWS SDK - Testcontainers - Replaced hardcoded dependency versions across multiple modules with shared version variables. - Updated `resolutionStrategy.force` declarations to use centralized version properties. - Updated dependency constraints and BOM references to use shared version variables. - Removed module-specific duplicate version declarations from `app/proprietary/build.gradle`. - Standardized dependency declarations across `common`, `core`, `proprietary`, and `saas` modules. ## Why the change was made - Reduce duplication of dependency version definitions. - Simplify future dependency upgrades and maintenance. - Ensure consistent dependency versions across all modules. - Improve readability and reduce the risk of version drift between subprojects. - Make security-related dependency overrides easier to maintain from a single location. --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have run `task check` to verify linters, typechecks, and tests pass - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#7-testing) for more details.
87 lines
4.0 KiB
Groovy
87 lines
4.0 KiB
Groovy
// Configure bootRun to disable it or point to a main class
|
|
bootRun {
|
|
enabled = false
|
|
}
|
|
spotless {
|
|
java {
|
|
target 'src/**/java/**/*.java'
|
|
targetExclude 'src/main/java/org/apache/**'
|
|
googleJavaFormat(googleJavaFormatVersion).aosp().reorderImports(false)
|
|
// google-java-format 1.28.0 bundles Guava 32.x which crashes Spotless lint on JDK 24/25
|
|
suppressLintsFor { setStep('google-java-format') }
|
|
|
|
importOrder("java", "javax", "org", "com", "net", "io", "jakarta", "lombok", "me", "stirling")
|
|
trimTrailingWhitespace()
|
|
leadingTabsToSpaces()
|
|
endWithNewline()
|
|
}
|
|
yaml {
|
|
target '**/*.yml', '**/*.yaml'
|
|
trimTrailingWhitespace()
|
|
leadingTabsToSpaces()
|
|
endWithNewline()
|
|
}
|
|
format 'gradle', {
|
|
target '**/gradle/*.gradle', '**/*.gradle'
|
|
trimTrailingWhitespace()
|
|
leadingTabsToSpaces()
|
|
endWithNewline()
|
|
}
|
|
}
|
|
dependencies {
|
|
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.20.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:7.5.10' // RAR archive support for CBR files
|
|
api 'jakarta.servlet:jakarta.servlet-api:6.1.0'
|
|
api 'org.snakeyaml:snakeyaml-engine:3.0.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:8.12.6'
|
|
api 'org.simplejavamail:outlook-module:8.12.6' // MSG file support
|
|
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=all|<csv of linux-x64,linux-arm64,darwin-x64,darwin-arm64,windows-x64>
|
|
def jpdfiumPlatformsProp = (project.findProperty('jpdfiumPlatforms') ?: 'all').toString().trim()
|
|
def jpdfiumAllPlatforms = ['linux-x64', 'linux-arm64', 'darwin-x64', 'darwin-arm64', 'windows-x64']
|
|
def jpdfiumPlatforms = jpdfiumPlatformsProp == 'all'
|
|
? jpdfiumAllPlatforms
|
|
: 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(', ')} or 'all'.")
|
|
}
|
|
logger.lifecycle("JPDFium native platforms: ${jpdfiumPlatforms.join(', ')}")
|
|
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}"
|
|
}
|