This commit introduces the spring-core-coroutines module in order to avoid referencing Kotlin code from Java one, which is currently not supported by Eclipse. During the build, spring-core-coroutines is merged into spring-core, so this change is expected to have no impact for end users. This module contains functions accessible from Java via the CoroutinesUtils class to adapt Coroutines and Deferred instances to and from Mono. See gh-19975
321 lines
11 KiB
Groovy
321 lines
11 KiB
Groovy
buildscript {
|
|
repositories {
|
|
maven { url "https://repo.spring.io/plugins-release" }
|
|
}
|
|
dependencies {
|
|
classpath("io.spring.gradle:propdeps-plugin:0.0.9.RELEASE")
|
|
classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16")
|
|
}
|
|
}
|
|
|
|
// 3rd party plugin repositories can be configured in settings.gradle
|
|
plugins {
|
|
id "io.spring.dependency-management" version "1.0.5.RELEASE" apply false
|
|
id "org.jetbrains.kotlin.jvm" version "1.3.21" apply false
|
|
id "org.jetbrains.dokka" version "0.9.18"
|
|
id "org.asciidoctor.convert" version "1.5.8"
|
|
}
|
|
|
|
ext {
|
|
linkHomepage = "https://projects.spring.io/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.equals("spring-build-src") && !it.name.equals("spring-framework-bom") && !it.name.equals("spring-core-coroutines")
|
|
}
|
|
|
|
aspectjVersion = "1.9.2"
|
|
coroutinesVersion = "1.1.1"
|
|
freemarkerVersion = "2.3.28"
|
|
groovyVersion = "2.5.6"
|
|
hsqldbVersion = "2.4.1"
|
|
jackson2Version = "2.9.8"
|
|
jettyVersion = "9.4.15.v20190215"
|
|
junit5Version = "5.4.1"
|
|
kotlinVersion = "1.3.21"
|
|
log4jVersion = "2.11.2"
|
|
nettyVersion = "4.1.34.Final"
|
|
quartzVersion = "2.3.0"
|
|
reactorVersion = "Californium-SR5"
|
|
rxjavaVersion = "1.3.8"
|
|
rxjavaAdapterVersion = "1.2.1"
|
|
rxjava2Version = "2.2.7"
|
|
slf4jVersion = "1.7.26" // spring-jcl + consistent 3rd party deps
|
|
tiles3Version = "3.0.8"
|
|
tomcatVersion = "9.0.17"
|
|
undertowVersion = "2.0.19.Final"
|
|
|
|
gradleScriptDir = "${rootProject.projectDir}/gradle"
|
|
withoutJclOverSlf4J = {
|
|
exclude group: "org.slf4j", module: "jcl-over-slf4j"
|
|
}
|
|
}
|
|
|
|
configure(allprojects) { project ->
|
|
group = "org.springframework"
|
|
version = qualifyVersionIfNecessary(version)
|
|
|
|
apply plugin: "java"
|
|
apply plugin: "kotlin"
|
|
apply plugin: "checkstyle"
|
|
apply plugin: "propdeps"
|
|
apply plugin: "test-source-set-dependencies"
|
|
apply plugin: "io.spring.dependency-management"
|
|
apply from: "${gradleScriptDir}/ide.gradle"
|
|
|
|
dependencyManagement {
|
|
resolutionStrategy {
|
|
cacheChangingModulesFor 0, "seconds"
|
|
}
|
|
applyMavenExclusions = false
|
|
generatedPomCustomization {
|
|
enabled = false
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|
|
}
|
|
|
|
def commonCompilerArgs =
|
|
["-Xlint:serial", "-Xlint:cast", "-Xlint:classfile", "-Xlint:dep-ann",
|
|
"-Xlint:divzero", "-Xlint:empty", "-Xlint:finally", "-Xlint:overrides",
|
|
"-Xlint:path", "-Xlint:processing", "-Xlint:static", "-Xlint:try", "-Xlint:-options"]
|
|
|
|
compileJava.options*.compilerArgs = commonCompilerArgs +
|
|
["-Xlint:varargs", "-Xlint:fallthrough", "-Xlint:rawtypes",
|
|
"-Xlint:deprecation", "-Xlint:unchecked", "-Werror"]
|
|
|
|
compileTestJava.options*.compilerArgs = commonCompilerArgs +
|
|
["-Xlint:-varargs", "-Xlint:-fallthrough", "-Xlint:-rawtypes",
|
|
"-Xlint:-deprecation", "-Xlint:-unchecked"]
|
|
|
|
compileJava {
|
|
sourceCompatibility = 1.8 // can be switched to 11 for testing
|
|
targetCompatibility = 1.8
|
|
options.encoding = "UTF-8"
|
|
}
|
|
|
|
compileTestJava {
|
|
sourceCompatibility = 1.8 // can be switched to 11 for testing
|
|
targetCompatibility = 1.8
|
|
options.encoding = "UTF-8"
|
|
options.compilerArgs += "-parameters"
|
|
}
|
|
|
|
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")
|
|
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", '**/*$*'])
|
|
reports.junitXml.setDestination(file("$buildDir/test-results"))
|
|
}
|
|
|
|
checkstyle {
|
|
toolVersion = "8.18"
|
|
configDir = rootProject.file("src/checkstyle")
|
|
}
|
|
|
|
repositories {
|
|
maven { url "https://repo.spring.io/libs-release" }
|
|
maven { url "https://repo.spring.io/snapshot" } // Reactor
|
|
maven { url "https://oss.jfrog.org/artifactory/libs-snapshot" } // RSocket
|
|
mavenLocal()
|
|
}
|
|
|
|
dependencies {
|
|
testCompile("junit:junit:4.12") {
|
|
exclude group: "org.hamcrest", module: "hamcrest-core"
|
|
}
|
|
testCompile("org.mockito:mockito-core:2.25.0") {
|
|
exclude group: "org.hamcrest", module: "hamcrest-core"
|
|
}
|
|
testCompile("io.mockk:mockk:1.9.1")
|
|
testCompile("org.hamcrest:hamcrest-all:1.3")
|
|
testCompile("org.assertj:assertj-core:3.11.0")
|
|
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.7")
|
|
}
|
|
|
|
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/${quartzVersion}/",
|
|
"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 - project(":spring-build-src")) { 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.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 from: "${gradleScriptDir}/jdiff.gradle"
|
|
apply from: "${gradleScriptDir}/docs.gradle"
|
|
|
|
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")
|
|
}
|
|
|
|
artifacts {
|
|
archives docsZip
|
|
archives schemaZip
|
|
archives distZip
|
|
}
|
|
|
|
wrapper {
|
|
doLast() {
|
|
def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
|
|
def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
|
|
File wrapperFile = file("gradlew")
|
|
wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
|
|
"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
|
|
File wrapperBatFile = file("gradlew.bat")
|
|
wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
|
|
"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Support publication of artifacts versioned by topic branch.
|
|
* CI builds supply `-P BRANCH_NAME=<TOPIC>` to gradle at build time.
|
|
* If <TOPIC> starts with 'SPR-', change version
|
|
* from BUILD-SNAPSHOT => <TOPIC>-SNAPSHOT
|
|
* e.g. 3.2.1.BUILD-SNAPSHOT => 3.2.1.SPR-1234-SNAPSHOT
|
|
*/
|
|
def qualifyVersionIfNecessary(version) {
|
|
if (rootProject.hasProperty("BRANCH_NAME")) {
|
|
def qualifier = rootProject.getProperty("BRANCH_NAME")
|
|
if (qualifier.startsWith("SPR-")) {
|
|
return version.replace("BUILD", qualifier)
|
|
}
|
|
}
|
|
return version
|
|
}
|