buildscript { dependencies { classpath "io.spring.javaformat:spring-javaformat-gradle-plugin:$springJavaformatVersion" classpath 'io.spring.nohttp:nohttp-gradle:0.0.10' classpath "io.freefair.gradle:aspectj-plugin:6.4.3" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath "com.netflix.nebula:nebula-project-plugin:8.2.0" } repositories { maven { url 'https://repo.spring.io/plugins-snapshot' } maven { url 'https://plugins.gradle.org/m2/' } } } apply plugin: 'io.spring.nohttp' apply plugin: 'locks' apply plugin: 's101' apply plugin: 'io.spring.convention.root' apply plugin: 'io.spring.convention.include-check-remote' apply plugin: 'org.jetbrains.kotlin.jvm' apply plugin: 'org.springframework.security.update-dependencies' apply plugin: 'org.springframework.security.update-version' apply plugin: 'org.springframework.security.sagan' apply plugin: 'org.springframework.github.milestone' apply plugin: 'org.springframework.github.changelog' apply plugin: 'org.springframework.github.release' group = 'org.springframework.security' description = 'Spring Security' ext.snapshotBuild = version.contains("SNAPSHOT") ext.releaseBuild = version.contains("SNAPSHOT") ext.milestoneBuild = !(snapshotBuild || releaseBuild) repositories { mavenCentral() } tasks.named("saganCreateRelease") { referenceDocUrl = "https://docs.spring.io/spring-security/reference/{version}/index.html" apiDocUrl = "https://docs.spring.io/spring-security/site/docs/{version}/api/" } tasks.named("gitHubCheckMilestoneHasNoOpenIssues") { repository { owner = "spring-projects" name = "spring-security" } } tasks.named("gitHubNextReleaseMilestone") { repository { owner = "spring-projects" name = "spring-security" } } tasks.named("gitHubCheckNextVersionDueToday") { repository { owner = "spring-projects" name = "spring-security" } } tasks.named("scheduleNextRelease") { repository { owner = "spring-projects" name = "spring-security" } weekOfMonth = 3 dayOfWeek = 1 } tasks.named("createGitHubRelease") { repository { owner = "spring-projects" name = "spring-security" } } tasks.named("dispatchGitHubWorkflow") { repository { owner = "spring-projects" name = "spring-security" } } tasks.named("updateDependencies") { // we aren't Gradle 7 compatible yet checkForGradleUpdate = false } updateDependenciesSettings { gitHub { organization = "spring-projects" repository = "spring-security" } addFiles({ return [ project.file("buildSrc/src/main/groovy/io/spring/gradle/convention/CheckstylePlugin.groovy") ] }) dependencyExcludes { majorVersionBump() alphaBetaVersions() snapshotVersions() addRule { components -> components.withModule("org.python:jython") { selection -> ModuleComponentIdentifier candidate = selection.getCandidate(); if (!candidate.getVersion().equals(selection.getCurrentVersion())) { selection.reject("jython updates break integration tests"); } } components.withModule("com.nimbusds:nimbus-jose-jwt") { selection -> ModuleComponentIdentifier candidate = selection.getCandidate(); if (!candidate.getVersion().equals(selection.getCurrentVersion())) { selection.reject("nimbus-jose-jwt gets updated when oauth2-oidc-sdk is updated to ensure consistency"); } } components.all { selection -> ModuleComponentIdentifier candidate = selection.getCandidate(); // Do not compare version due to multiple versions existing // will cause opensaml 3.x to be updated to 4.x if (candidate.getGroup().equals("org.opensaml")) { selection.reject("org.opensaml maintains two different versions, so it must be updated manually"); } } } } } subprojects { plugins.withType(JavaPlugin) { project.sourceCompatibility=JavaVersion.VERSION_17 } tasks.withType(JavaCompile) { options.encoding = "UTF-8" options.compilerArgs.add("-parameters") } } allprojects { if (!['spring-security-bom', 'spring-security-docs'].contains(project.name)) { apply plugin: 'io.spring.javaformat' apply plugin: 'checkstyle' pluginManager.withPlugin("io.spring.convention.checkstyle", { plugin -> configure(plugin) { dependencies { checkstyle "io.spring.javaformat:spring-javaformat-checkstyle:$springJavaformatVersion" } checkstyle { toolVersion = '8.34' } } }) if (project.name.contains('sample')) { tasks.whenTaskAdded { task -> if (task.name.contains('format') || task.name.contains('checkFormat') || task.name.contains("checkstyle")) { task.enabled = false } } } } tasks.withType(JavaCompile).configureEach { javaCompiler = javaToolchains.compilerFor { languageVersion = JavaLanguageVersion.of(17) } } } if (hasProperty('buildScan')) { buildScan { termsOfServiceUrl = 'https://gradle.com/terms-of-service' termsOfServiceAgree = 'yes' } } nohttp { allowlistFile = project.file("etc/nohttp/allowlist.lines") source.exclude "buildSrc/build/**" } tasks.register('checkSamples') { includeCheckRemote { repository = 'spring-projects/spring-security-samples' ref = samplesBranch if (project.hasProperty("samplesInitScript")) { initScripts = [samplesInitScript] projectProperties = ["localRepositoryPath": localRepositoryPath, "springSecurityVersion": project.version] } } dependsOn checkRemote } s101 { configurationDirectory = project.file("etc/s101") }