319 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Groovy
		
	
	
	
			
		
		
	
	
			319 lines
		
	
	
		
			10 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.2.71" apply false
 | |
| 	id "org.jetbrains.dokka" version "0.9.17"
 | |
| 	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://jira.spring.io/browse/SPR"
 | |
| 	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")
 | |
| 	}
 | |
| 
 | |
| 	aspectjVersion       = "1.9.2"
 | |
| 	freemarkerVersion    = "2.3.28"
 | |
| 	groovyVersion        = "2.5.4"
 | |
| 	hsqldbVersion        = "2.4.1"
 | |
| 	jackson2Version      = "2.9.7"
 | |
| 	jettyVersion         = "9.4.14.v20181114"
 | |
| 	junit5Version        = "5.3.1"
 | |
| 	kotlinVersion        = "1.2.71"
 | |
| 	log4jVersion         = "2.11.1"
 | |
| 	nettyVersion         = "4.1.31.Final"
 | |
| 	reactorVersion       = "Californium-BUILD-SNAPSHOT"
 | |
| 	rxjavaVersion        = "1.3.8"
 | |
| 	rxjavaAdapterVersion = "1.2.1"
 | |
| 	rxjava2Version       = "2.2.3"
 | |
| 	slf4jVersion         = "1.7.25"	  // spring-jcl + consistent 3rd party deps
 | |
| 	tiles3Version        = "3.0.8"
 | |
| 	tomcatVersion        = "9.0.13"
 | |
| 	undertowVersion      = "2.0.15.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"]
 | |
| 			apiVersion = "1.1"
 | |
| 			languageVersion = "1.1"
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	compileTestKotlin {
 | |
| 		kotlinOptions {
 | |
| 			jvmTarget = "1.8"
 | |
| 			freeCompilerArgs = ["-Xjsr305=strict"]
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	test {
 | |
| 		systemProperty("java.awt.headless", "true")
 | |
| 		systemProperty("testGroups", project.properties.get("testGroups"))
 | |
| 		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.14"
 | |
| 		configDir = rootProject.file("src/checkstyle")
 | |
| 	}
 | |
| 
 | |
| 	repositories {
 | |
| 		maven { url "https://repo.spring.io/libs-release" }
 | |
| 		maven { url "https://repo.spring.io/snapshot" } // Californium snapshots
 | |
| 	}
 | |
| 
 | |
| 	dependencies {
 | |
| 		testCompile("junit:junit:4.12") {
 | |
| 			exclude group: "org.hamcrest", module: "hamcrest-core"
 | |
| 		}
 | |
| 		testCompile("org.mockito:mockito-core:2.23.0") {
 | |
| 			exclude group: "org.hamcrest", module: "hamcrest-core"
 | |
| 		}
 | |
| 		testCompile("com.nhaarman:mockito-kotlin:1.6.0") {
 | |
| 			exclude module: "kotlin-stdlib"
 | |
| 			exclude module: "kotlin-reflect"
 | |
| 			exclude module: "mockito-core"
 | |
| 		}
 | |
| 		testCompile("org.hamcrest:hamcrest-all:1.3")
 | |
| 		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.5")
 | |
| 	}
 | |
| 
 | |
| 	ext.javadocLinks = [
 | |
| 		"http://docs.oracle.com/javase/8/docs/api/",
 | |
| 		"http://docs.oracle.com/javaee/7/api/",
 | |
| 		"http://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/",  // CommonJ
 | |
| 		"http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.javadoc.doc/web/apidocs/",
 | |
| 		"http://glassfish.java.net/nonav/docs/v3/api/",
 | |
| 		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
 | |
| 		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
 | |
| 		"http://tiles.apache.org/tiles-request/apidocs/",
 | |
| 		"http://tiles.apache.org/framework/apidocs/",
 | |
| 		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
 | |
| 		"http://ehcache.org/apidocs/2.10.4",
 | |
| 		"http://quartz-scheduler.org/api/2.2.1/",
 | |
| 		"http://fasterxml.github.io/jackson-core/javadoc/2.8/",
 | |
| 		"http://fasterxml.github.io/jackson-databind/javadoc/2.8/",
 | |
| 		"http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.8/",
 | |
| 		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/"
 | |
| 	] 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.16.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
 | |
| }
 |