buildscript { repositories { maven { url "https://repo.spring.io/plugins-release" } } dependencies { classpath("io.spring.nohttp:nohttp-gradle:0.0.3.RELEASE") classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16") classpath("io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE") } } // 3rd party plugin repositories can be configured in settings.gradle plugins { id 'org.springframework.build.test-sources' apply false id "io.spring.dependency-management" version "1.0.7.RELEASE" apply false id "org.jetbrains.kotlin.jvm" version "1.3.41" apply false id "org.jetbrains.dokka" version "0.9.18" id "org.asciidoctor.convert" version "1.5.8" } ext { linkHomepage = "https://spring.io/projects/spring-framework" linkCi = "https://build.spring.io/browse/SPR" linkIssue = "https://github.com/spring-projects/spring-framework/issues" linkScmUrl = "https://github.com/spring-projects/spring-framework" linkScmConnection = "scm:git:git://github.com/spring-projects/spring-framework.git" linkScmDevConnection = "scm:git:ssh://git@github.com:spring-projects/spring-framework.git" moduleProjects = subprojects.findAll { (it.name != "spring-framework-bom") && (it.name != "spring-core-coroutines") } aspectjVersion = "1.9.4" coroutinesVersion = "1.3.0-RC" freemarkerVersion = "2.3.28" groovyVersion = "2.5.7" hsqldbVersion = "2.5.0" jackson2Version = "2.9.9" jettyVersion = "9.4.19.v20190610" junit5Version = "5.5.1" kotlinVersion = "1.3.41" log4jVersion = "2.12.0" nettyVersion = "4.1.38.Final" reactorVersion = "Dysprosium-M3" rsocketVersion = "1.0.0-RC2" rxjavaVersion = "1.3.8" rxjavaAdapterVersion = "1.2.1" rxjava2Version = "2.2.10" slf4jVersion = "1.7.26" // spring-jcl + consistent 3rd party deps tiles3Version = "3.0.8" tomcatVersion = "9.0.22" undertowVersion = "2.0.23.Final" gradleScriptDir = "${rootProject.projectDir}/gradle" withoutJclOverSlf4j = { exclude group: "org.slf4j", module: "jcl-over-slf4j" } } configure(allprojects) { project -> group = "org.springframework" apply plugin: "java" apply plugin: "kotlin" apply plugin: "checkstyle" apply plugin: 'org.springframework.build.compile' apply plugin: 'org.springframework.build.optional-dependencies' apply plugin: 'org.springframework.build.test-sources' apply plugin: "io.spring.dependency-management" apply from: "${gradleScriptDir}/ide.gradle" dependencyManagement { resolutionStrategy { cacheChangingModulesFor 0, "seconds" } applyMavenExclusions = false generatedPomCustomization { enabled = false } imports { mavenBom "org.junit:junit-bom:${junit5Version}" mavenBom "org.jetbrains.kotlin:kotlin-bom:${kotlinVersion}" mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:${coroutinesVersion}" } } configurations.all { // Check for updates every build resolutionStrategy.cacheChangingModulesFor 0, "seconds" // Consistent slf4j version (e.g. clashes between slf4j versions) resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.group == "org.slf4j") { details.useVersion slf4jVersion } } } compileKotlin { kotlinOptions { jvmTarget = "1.8" freeCompilerArgs = ["-Xjsr305=strict"] } } compileTestKotlin { kotlinOptions { jvmTarget = "1.8" freeCompilerArgs = ["-Xjsr305=strict"] } } test { systemProperty("java.awt.headless", "true") systemProperty("testGroups", project.properties.get("testGroups")) systemProperty("io.netty.leakDetection.level", "paranoid") useJUnitPlatform() scanForTestClasses = false include(["**/*Tests.class", "**/*Test.class"]) // Since we set scanForTestClasses to false, we need to filter out inner // classes with the "$" pattern; otherwise, using -Dtest.single=MyTests to // run MyTests by itself will fail if MyTests contains any inner classes. exclude(["**/Abstract*.class", '**/*$*']) } checkstyle { toolVersion = "8.23" configDir = rootProject.file("src/checkstyle") } repositories { mavenCentral() maven { url "https://repo.spring.io/libs-release" } maven { url "https://repo.spring.io/milestone" } // Reactor mavenLocal() } dependencies { testCompile("org.junit.jupiter:junit-jupiter-api") testCompile("org.junit.jupiter:junit-jupiter-params") testCompile("org.mockito:mockito-core:3.0.0") { exclude group: "org.hamcrest", module: "hamcrest-core" } testCompile("org.mockito:mockito-junit-jupiter:3.0.0") testCompile("io.mockk:mockk:1.9.3") testCompile("org.hamcrest:hamcrest:2.1") testCompile("org.assertj:assertj-core:3.13.1") // Pull in the latest JUnit 5 Launcher API to ensure proper support in IDEs. testRuntime("org.junit.platform:junit-platform-launcher") testRuntime("org.junit.jupiter:junit-jupiter-engine") testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}") testRuntime("org.apache.logging.log4j:log4j-slf4j-impl:${log4jVersion}") testRuntime("org.apache.logging.log4j:log4j-jul:${log4jVersion}") // JSR-305 only used for non-required meta-annotations compileOnly("com.google.code.findbugs:jsr305:3.0.2") testCompileOnly("com.google.code.findbugs:jsr305:3.0.2") checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.15") } ext.javadocLinks = [ "https://docs.oracle.com/javase/8/docs/api/", "https://docs.oracle.com/javaee/7/api/", "https://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/", // CommonJ "https://www.ibm.com/support/knowledgecenter/SS7JFU_8.5.5/com.ibm.websphere.javadoc.doc/web/apidocs/", "https://glassfish.java.net/nonav/docs/v3/api/", "https://docs.jboss.org/jbossas/javadoc/4.0.5/connector/", "https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/", "https://tiles.apache.org/tiles-request/apidocs/", "https://tiles.apache.org/framework/apidocs/", "https://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/", "https://www.ehcache.org/apidocs/2.10.4", "https://www.quartz-scheduler.org/api/2.3.0/", "https://fasterxml.github.io/jackson-core/javadoc/2.9/", "https://fasterxml.github.io/jackson-databind/javadoc/2.9/", "https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/", "https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/", "https://junit.org/junit4/javadoc/4.12/", "https://junit.org/junit5/docs/${junit5Version}/api/" ] as String[] } configure(subprojects.findAll { (it.name != "spring-core-coroutines") } ) { subproject -> apply from: "${gradleScriptDir}/publish-maven.gradle" jar { manifest.attributes["Implementation-Title"] = subproject.name manifest.attributes["Implementation-Version"] = subproject.version manifest.attributes["Automatic-Module-Name"] = subproject.name.replace('-', '.') // for Jigsaw manifest.attributes["Created-By"] = "${System.getProperty("java.version")} (${System.getProperty("java.specification.vendor")})" from("${rootProject.projectDir}/src/docs/dist") { include "license.txt" include "notice.txt" into "META-INF" expand(copyright: new Date().format("yyyy"), version: project.version) } } javadoc { description = "Generates project-level javadoc for use in -javadoc jar" options.encoding = "UTF-8" options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED options.author = true options.header = project.name options.use = true options.links(project.ext.javadocLinks) options.addStringOption("Xdoclint:none", "-quiet") // Suppress warnings due to cross-module @see and @link references. // Note that global 'api' task does display all warnings. logging.captureStandardError LogLevel.INFO logging.captureStandardOutput LogLevel.INFO // suppress "## warnings" message } task sourcesJar(type: Jar, dependsOn: classes) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE classifier = "sources" from sourceSets.main.allSource // Don't include or exclude anything explicitly by default. See SPR-12085. } task javadocJar(type: Jar) { classifier = "javadoc" from javadoc } artifacts { archives sourcesJar archives javadocJar } } configure(rootProject) { description = "Spring Framework" apply plugin: "groovy" apply plugin: "io.spring.nohttp" apply from: "${gradleScriptDir}/jdiff.gradle" apply from: "${gradleScriptDir}/docs.gradle" nohttp { source.exclude "**/test-output/**" whitelistFile = project.file("src/nohttp/whitelist.lines") def projectDirURI = project.projectDir.toURI() allprojects.forEach { p -> def outURI = p.file("out").toURI() def pattern = projectDirURI.relativize(outURI).path + "**" source.exclude pattern } } dependencyManagement { imports { mavenBom "io.projectreactor:reactor-bom:${reactorVersion}" } } // Don't publish the default jar for the root project configurations.archives.artifacts.clear() dependencies { // for integration tests testCompile(project(":spring-aop")) testCompile(project(":spring-beans")) testCompile(project(":spring-context")) testCompile(project(":spring-core")) testCompile(project(":spring-expression")) testCompile(project(":spring-jdbc")) testCompile(project(":spring-orm")) testCompile(project(":spring-test")) testCompile(project(":spring-tx")) testCompile(project(":spring-web")) testCompile("javax.inject:javax.inject:1") testCompile("javax.resource:javax.resource-api:1.7.1") testCompile("javax.servlet:javax.servlet-api:3.1.0") testCompile("org.aspectj:aspectjweaver:${aspectjVersion}") testCompile("org.hsqldb:hsqldb:${hsqldbVersion}") testCompile("org.hibernate:hibernate-core:5.1.17.Final") asciidoctor("io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE") } artifacts { archives docsZip archives schemaZip archives distZip } }