build.gradle 57.4 KB
Newer Older
1
buildscript {
2
	repositories {
S
Sebastien Deleuze 已提交
3
		maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
4
		maven { url "https://repo.spring.io/plugins-snapshot" }
5 6
	}
	dependencies {
R
Rob Winch 已提交
7
		classpath("io.spring.gradle:propdeps-plugin:0.0.8")
8
		classpath("org.asciidoctor:asciidoctor-gradle-plugin:1.5.3")
9
		classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0-beta-38")
10
		classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
11
		classpath("io.spring.gradle:dependency-management-plugin:1.0.0.BUILD-SNAPSHOT")
12
	}
13 14
}

15
plugins {
16
	id "org.sonarqube" version "2.2.1"
17 18
}

S
Stephane Nicoll 已提交
19 20 21 22 23 24
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'
25
	linkScmDevConnection = 'scm:git:ssh://git@github.com:spring-projects/spring-framework.git'
26

27
	moduleProjects = subprojects.findAll {
28 29
		!it.name.equals('spring-build-src') && !it.name.equals('spring-framework-bom')
	}
S
Stephane Nicoll 已提交
30 31
}

C
Chris Beams 已提交
32
configure(allprojects) { project ->
33 34
	group = "org.springframework"
	version = qualifyVersionIfNecessary(version)
35

36
	ext.activationApiVersion   = "1.1.1"
37
	ext.annotationApiVersion   = "1.2"
J
Juergen Hoeller 已提交
38
	ext.aspectjVersion         = "1.9.0.BETA-5"
39
	ext.beanvalVersion         = "1.1.0.Final"
40
	ext.cacheApiVersion        = "1.0.0"
41
	ext.caffeineVersion        = "2.3.5"
42
	ext.eclipselinkVersion     = "2.6.4"
43
	ext.ehcacheVersion         = "2.10.3"
44
	ext.ehcachejcacheVersion   = "1.0.1"
45
	ext.ehcache3Version        = "3.2.0"
46
	ext.ejbApiVersion          = "3.2"
J
Juergen Hoeller 已提交
47
	ext.elApiVersion           = "3.0.1-b04"
48 49
	ext.fileuploadVersion      = "1.3.2"
	ext.freemarkerVersion      = "2.3.25-incubating"
50
	ext.groovyVersion          = "2.4.8"
51
	ext.gsonVersion            = "2.8.0"
52
	ext.hamcrestVersion        = "1.3"
53
	ext.hibernate5Version      = "5.2.7.Final"
54
	ext.hibval5Version         = "5.4.0.Final"
55
	ext.hsqldbVersion          = "2.3.4"
56
	ext.httpasyncVersion       = "4.1.3"
57
	ext.httpclientVersion      = "4.5.3"
58
	ext.interceptorApiVersion  = "1.2"
59
	ext.jackson2Version        = "2.8.6"
60
	ext.javamailVersion        = "1.5.6"
61
	ext.jaxbVersion            = "2.2.11"
62
	ext.jaxwsVersion           = "2.2.11"
63
	ext.jcaVersion             = "1.7"
J
Juergen Hoeller 已提交
64
	ext.jettyVersion           = "9.4.1.v20170120"
65
	ext.jmsVersion             = "2.0.1"
66
	ext.jodaVersion            = "2.9.7"
67
	ext.jpaVersion             = "2.1.1"
68
	ext.jsfVersion             = "2.2"
69 70 71
	ext.jspVersion             = "2.3.2-b02"
	ext.jtaVersion             = "1.2"
	ext.junitVersion           = "4.12"
J
Juergen Hoeller 已提交
72 73
	ext.junitJupiterVersion    = '5.0.0-M3'
	ext.junitPlatformVersion   = '1.0.0-M3'
74
	ext.kotlinVersion          = "1.1.0-beta-38"  // also change kotlin-gradle-plugin version when upgrading
75
	ext.log4jVersion           = '2.8'
76
	ext.nettyVersion           = "4.1.8.Final"
77
	ext.okhttpVersion          = "2.7.5"
78
	ext.okhttp3Version         = "3.6.0"
79
	ext.poiVersion             = "3.15"
80
	ext.protobufVersion        = "3.1.0"
81
	ext.quartzVersion          = "2.2.3"
82
	ext.reactorVersion         = "Aluminium-BUILD-SNAPSHOT"
83
	ext.romeVersion            = "1.7.1"
84
	ext.rxjavaVersion          = '1.2.6'
85
	ext.rxjavaAdapterVersion   = '1.2.1'
86 87
	ext.rxjava2Version         = '2.0.5'
	ext.rxnettyVersion         = '0.5.2'
88
	ext.servletVersion         = "3.1.0"
89
	ext.slf4jVersion           = "1.7.23"
90 91
	ext.snakeyamlVersion       = "1.17"
	ext.snifferVersion         = "1.15"
92
	ext.testngVersion          = "6.10"
J
Juergen Hoeller 已提交
93
	ext.tiles3Version          = "3.0.7"
B
Brian Clozel 已提交
94
	ext.tomcatVersion          = "8.5.11"
95 96
	ext.tyrusVersion           = "1.13.1"
	ext.undertowVersion        = "1.4.10.Final"
97
	ext.websocketVersion       = "1.1"
98
	ext.woodstoxVersion        = "5.0.3"
99
	ext.xmlunitVersion         = "2.3.0"
100
	ext.xnioVersion            = "3.4.3.Final"
101
	ext.xstreamVersion         = "1.4.9"
102

103
	ext.gradleScriptDir = "${rootProject.projectDir}/gradle"
104

105
	apply plugin: "propdeps"
P
Phillip Webb 已提交
106
	apply plugin: "java"
107
	apply plugin: "test-source-set-dependencies"
108
	apply from: "${gradleScriptDir}/ide.gradle"
C
Chris Beams 已提交
109

S
Sebastien Deleuze 已提交
110 111 112 113 114
	// Kotlin compiler does not support JDK 9 yet, see https://youtrack.jetbrains.com/issue/KT-14988
	if (!JavaVersion.current().java9Compatible) {
		apply plugin: "kotlin"
	}

S
Stephane Nicoll 已提交
115 116 117 118 119
	configurations {
		sniffer
		javaApiSignature
	}

120
	configurations.all {
J
Juergen Hoeller 已提交
121
		// Check for updates every build
122 123
		resolutionStrategy.cacheChangingModulesFor 0, 'seconds'

J
Juergen Hoeller 已提交
124
		// Consistent netty version (e.g. clashes between netty-all vs netty-common)
125 126 127 128 129 130 131
		resolutionStrategy.eachDependency { DependencyResolveDetails details ->
			if (details.requested.group == 'io.netty') {
				details.useVersion nettyVersion
			}
		}
	}

P
Phillip Webb 已提交
132 133 134
	compileJava.options*.compilerArgs = [
		"-Xlint:serial", "-Xlint:varargs", "-Xlint:cast", "-Xlint:classfile",
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
S
Stephane Nicoll 已提交
135
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
P
Phillip Webb 已提交
136
		"-Xlint:try", "-Xlint:fallthrough", "-Xlint:rawtypes", "-Xlint:deprecation",
137
		"-Xlint:unchecked", "-Xlint:-options", "-Werror"
138
	]
C
Chris Beams 已提交
139

P
Phillip Webb 已提交
140
	compileTestJava.options*.compilerArgs = [
141
		"-Xlint:serial", "-Xlint:-varargs", "-Xlint:cast", "-Xlint:classfile",
P
Phillip Webb 已提交
142
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
S
Stephane Nicoll 已提交
143
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
P
Phillip Webb 已提交
144 145 146
		"-Xlint:try", "-Xlint:-fallthrough", "-Xlint:-rawtypes", "-Xlint:-deprecation",
		"-Xlint:-unchecked", "-Xlint:-options"]

147
	compileJava {
148 149
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
150
		options.encoding = 'UTF-8'
151 152 153
	}

	compileTestJava {
J
Juergen Hoeller 已提交
154 155
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
156
		options.encoding = 'UTF-8'
157
		options.compilerArgs += "-parameters"
J
Juergen Hoeller 已提交
158 159
	}

C
Chris Beams 已提交
160 161
	test {
		systemProperty("java.awt.headless", "true")
162
		systemProperty("testGroups", project.properties.get("testGroups"))
163
		scanForTestClasses = false
164
		include(["**/*Tests.class", "**/*Test.class"])
165 166
		// Since we set scanForTestClasses to false, we need to filter out inner
		// classes with the "$" pattern; otherwise, using -Dtest.single=MyTests to
167
		// run MyTests by itself will fail if MyTests contains any inner classes.
168
		exclude(["**/Abstract*.class", '**/*$*'])
S
Stephane Nicoll 已提交
169
		reports.junitXml.destination = file("$buildDir/test-results")
C
Chris Beams 已提交
170
	}
C
Chris Beams 已提交
171

172
	repositories {
173
		maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
B
Brian Clozel 已提交
174
		maven { url "https://repo.spring.io/libs-release" }
175
		maven { url "https://repo.spring.io/milestone" }
176
		maven { url "https://repo.spring.io/libs-snapshot" }
177
	}
C
Chris Beams 已提交
178

179
	dependencies {
180 181 182
		testCompile("junit:junit:${junitVersion}") {
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
183
		testCompile("org.mockito:mockito-core:2.6.1") {
184 185
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
186
		testCompile("org.hamcrest:hamcrest-all:${hamcrestVersion}")
187 188
		testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}")
		testRuntime("org.apache.logging.log4j:log4j-jcl:${log4jVersion}")
189

S
Stephane Nicoll 已提交
190
		sniffer("org.codehaus.mojo:animal-sniffer-ant-tasks:${snifferVersion}")
191
		javaApiSignature("org.codehaus.mojo.signature:java18:1.0@signature")
S
Stephane Nicoll 已提交
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
	}

	task copyJavaApiSignature(type: Copy) {
		ext.to = file("$buildDir/javaApiSignature/")
		description "Copy the resolved Animal Sniffer signature dependency artifact to a known location and name"
		from configurations.javaApiSignature
		into to
		rename '.*signature', 'javaApi.signature'
	}

	task sniff {
		group = "Verification"
		description = "Checks the Java API signatures"

		dependsOn compileJava
		dependsOn copyJavaApiSignature

		inputs.dir sourceSets.main.output.classesDir
		inputs.dir copyJavaApiSignature.to
211

S
Stephane Nicoll 已提交
212 213 214 215 216 217 218
		doLast {
			ant.taskdef(
				name: 'animalSniffer',
				classname: 'org.codehaus.mojo.animal_sniffer.ant.CheckSignatureTask',
				classpath: configurations.sniffer.asPath
			)

219 220 221 222 223 224 225
			// TODO: Animal Sniffer currently chokes on optional JDK 9 bytecode in AspectJ 1.9 beta 5
			// ant.animalSniffer(
			// 		signature: "$buildDir/javaApiSignature/javaApi.signature",
			// 		classpath: sourceSets.main.compileClasspath.asPath) {
			// 	path(path: sourceSets.main.output.classesDir)
			// 	annotation(className: "org.springframework.lang.UsesSunHttpServer")
			// }
S
Stephane Nicoll 已提交
226
		}
227
	}
C
Chris Beams 已提交
228 229

	ext.javadocLinks = [
230
		"http://docs.oracle.com/javase/8/docs/api/",
231
		"http://docs.oracle.com/javaee/7/api/",
232
		"http://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/",  // CommonJ
J
Juergen Hoeller 已提交
233 234
		"http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.javadoc.doc/web/apidocs/",
		"http://glassfish.java.net/nonav/docs/v3/api/",
P
Phillip Webb 已提交
235 236
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
237
		"http://tiles.apache.org/tiles-request/apidocs/",
J
Juergen Hoeller 已提交
238
		"http://tiles.apache.org/framework/apidocs/",
C
Chris Beams 已提交
239
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
B
Brian Clozel 已提交
240 241
		"http://ehcache.org/apidocs/${ehcacheVersion}",
		"http://ehcache.org/apidocs/${ehcache3Version}",
242
		"http://quartz-scheduler.org/api/2.2.1/",
243 244 245
		"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/",
246
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/"
C
Chris Beams 已提交
247
	] as String[]
248 249
}

250
configure(subprojects - project(":spring-build-src")) { subproject ->
251
	apply plugin: "merge"
252
	apply from: "${gradleScriptDir}/publish-maven.gradle"
253 254 255 256 257 258 259 260 261 262 263
	apply plugin: "io.spring.dependency-management"

	dependencyManagement {
		imports {
			mavenBom "io.projectreactor:reactor-bom:${reactorVersion}"
		}
		resolutionStrategy {
			cacheChangingModulesFor 0, 'seconds'
		}
		applyMavenExclusions = false
	}
264

S
Stephane Nicoll 已提交
265 266 267 268
	configurations {
		jacoco
	}
	dependencies {
269
		jacoco("org.jacoco:org.jacoco.agent:0.7.5.201505241946:runtime")
S
Stephane Nicoll 已提交
270 271 272
	}

	gradle.taskGraph.whenReady {taskGraph ->
273
		if (taskGraph.hasTask(':sonarqube')) {
S
Stephane Nicoll 已提交
274 275 276 277
			test.jvmArgs "-javaagent:${configurations.jacoco.asPath}=destfile=${buildDir}/jacoco.exec,includes=org.springframework.*"
		}
	}

278
	jar {
P
Phillip Webb 已提交
279 280 281 282
		manifest.attributes["Created-By"] =
			"${System.getProperty("java.version")} (${System.getProperty("java.specification.vendor")})"
		manifest.attributes["Implementation-Title"] = subproject.name
		manifest.attributes["Implementation-Version"] = subproject.version
283 284 285 286 287

		from("${rootProject.projectDir}/src/dist") {
			include "license.txt"
			include "notice.txt"
			into "META-INF"
P
Phillip Webb 已提交
288
			expand(copyright: new Date().format("yyyy"), version: project.version)
289 290 291 292
		}
	}

	javadoc {
C
Chris Beams 已提交
293 294
		description = "Generates project-level javadoc for use in -javadoc jar"

295 296 297
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = project.name
C
Chris Beams 已提交
298
		options.links(project.ext.javadocLinks)
299
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
300

301 302
		// Suppress warnings due to cross-module @see and @link references.
		// Note that global 'api' task does display all warnings.
C
Chris Beams 已提交
303
		logging.captureStandardError LogLevel.INFO
304
		logging.captureStandardOutput LogLevel.INFO  // suppress "## warnings" message
305 306
	}

307 308
	task sourcesJar(type: Jar, dependsOn: classes) {
		classifier = 'sources'
309
		from sourceSets.main.allSource
310
		// Don't include or exclude anything explicitly by default. See SPR-12085.
311 312 313
	}

	task javadocJar(type: Jar) {
P
Phillip Webb 已提交
314
		classifier = "javadoc"
315 316 317 318 319 320 321
		from javadoc
	}

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
322 323
}

324 325
project("spring-build-src") {
	description = "Exposes gradle buildSrc for IDE support"
326

327
	apply plugin: "groovy"
328 329 330

	dependencies {
		compile gradleApi()
R
Rob Winch 已提交
331
		compile localGroovy()
332 333 334 335 336
	}

	configurations.archives.artifacts.clear()
}

P
Phillip Webb 已提交
337 338
project("spring-core") {
	description = "Spring Core"
339

340 341
	// As of Spring 4.0.3, spring-core includes asm 5.x and repackages cglib 3.2, inlining
	// both into the spring-core jar. cglib 3.2 itself depends on asm 5.x and is therefore
342
	// further transformed by the JarJar task to depend on org.springframework.asm; this
343
	// avoids including two different copies of asm unnecessarily.
J
Juergen Hoeller 已提交
344
	def cglibVersion = "3.2.4"
J
Juergen Hoeller 已提交
345
	def objenesisVersion = "2.5.1"
346 347 348 349

	configurations {
		jarjar
		cglib
350
		objenesis
351 352 353 354 355 356 357 358 359 360 361 362 363 364
	}

	task cglibRepackJar(type: Jar) { repackJar ->
		repackJar.baseName = "spring-cglib-repack"
		repackJar.version = cglibVersion

		doLast() {
			project.ant {
				taskdef name: "jarjar", classname: "com.tonicsystems.jarjar.JarJarTask",
					classpath: configurations.jarjar.asPath
				jarjar(destfile: repackJar.archivePath) {
					configurations.cglib.each { originalJar ->
						zipfileset(src: originalJar)
					}
J
Juergen Hoeller 已提交
365
					// Repackage net.sf.cglib => org.springframework.cglib
P
Phillip Webb 已提交
366
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
J
Juergen Hoeller 已提交
367
					// As mentioned above, transform cglib"s internal asm dependencies from
368 369
					// org.objectweb.asm => org.springframework.asm. Doing this counts on the
					// the fact that Spring and cglib depend on the same version of asm!
P
Phillip Webb 已提交
370
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
371 372 373 374 375
				}
			}
		}
	}

376 377 378 379 380 381 382 383 384 385 386 387
	task objenesisRepackJar(type: Jar) { repackJar ->
		repackJar.baseName = "spring-objenesis-repack"
		repackJar.version = objenesisVersion

		doLast() {
			project.ant {
				taskdef name: "jarjar", classname: "com.tonicsystems.jarjar.JarJarTask",
					classpath: configurations.jarjar.asPath
				jarjar(destfile: repackJar.archivePath) {
					configurations.objenesis.each { originalJar ->
						zipfileset(src: originalJar)
					}
J
Juergen Hoeller 已提交
388
					// Repackage org.objenesis => org.springframework.objenesis
389 390 391 392 393 394
					rule(pattern: "org.objenesis.**", result: "org.springframework.objenesis.@1")
				}
			}
		}
	}

395
	dependencies {
396
		cglib("cglib:cglib:${cglibVersion}@jar")
397
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
398
		jarjar("com.googlecode.jarjar:jarjar:1.3")
399

P
Phillip Webb 已提交
400
		compile(files(cglibRepackJar))
401
		compile(files(objenesisRepackJar))
402
		compile("commons-logging:commons-logging:1.2")
403
		optional("net.sf.jopt-simple:jopt-simple:5.0.3")
404
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
405 406
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
407 408
		optional("org.reactivestreams:reactive-streams")
		optional("io.projectreactor:reactor-core")
409
		optional "io.reactivex:rxjava:${rxjavaVersion}"
S
Sebastien Deleuze 已提交
410
		optional "io.reactivex.rxjava2:rxjava:${rxjava2Version}"
411
		optional "io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}"
412
		optional("io.netty:netty-buffer:${nettyVersion}")
413
		testCompile("io.projectreactor.addons:reactor-test")
414
		testCompile("javax.xml.bind:jaxb-api:${jaxbVersion}")
415
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
416
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
417
		testCompile("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") {
P
Phillip Webb 已提交
418 419
			exclude group: "stax", module: "stax-api"
		}
420 421 422
	}

	jar {
J
Juergen Hoeller 已提交
423
		// Inline repackaged cglib classes directly into spring-core jar
424 425
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
426
			include "org/springframework/cglib/**"
427
		}
428 429 430 431 432

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
433
	}
C
Chris Beams 已提交
434 435
}

P
Phillip Webb 已提交
436 437
project("spring-beans") {
	description = "Spring Beans"
438

439
	dependencies {
440 441
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
442
		optional("javax.inject:javax.inject:1")
443 444
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
445
		optional("org.yaml:snakeyaml:${snakeyamlVersion}")
446
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
J
Juergen Hoeller 已提交
447
	}
C
Chris Beams 已提交
448 449
}

450 451
project("spring-beans-groovy") {
	description "Groovy Bean Definitions"
452

J
Juergen Hoeller 已提交
453
	merge.into = project(":spring-beans")
454
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
455 456 457

	dependencies {
		compile(project(":spring-core"))
458
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
J
Juergen Hoeller 已提交
459 460
	}

J
Juergen Hoeller 已提交
461
	// This module's Java and Groovy sources need to be compiled together.
462
	compileJava.enabled = false
J
Juergen Hoeller 已提交
463 464 465
	sourceSets {
		main {
			groovy {
466
				srcDir "src/main/java"
J
Juergen Hoeller 已提交
467 468 469
			}
		}
	}
470 471

	compileGroovy {
472 473
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
474
	}
J
Juergen Hoeller 已提交
475 476
}

P
Phillip Webb 已提交
477 478
project("spring-aop") {
	description = "Spring AOP"
479

480
	dependencies {
481
		compile(project(":spring-beans"))
482 483
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
484
		compile(files(project(":spring-core").objenesisRepackJar))
485
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
486
		optional("org.apache.commons:commons-pool2:2.4.2")
487
		optional("com.jamonapi:jamon:2.81")
488
	}
C
Chris Beams 已提交
489 490
}

P
Phillip Webb 已提交
491 492
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
493

494
	dependencies {
495
		compile(project(":spring-core"))
496
	}
C
Chris Beams 已提交
497 498
}

P
Phillip Webb 已提交
499 500
project("spring-instrument") {
	description = "Spring Instrument"
501

502
	jar {
P
Phillip Webb 已提交
503 504
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
505 506
		manifest.attributes["Agent-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
507 508 509
		manifest.attributes["Can-Redefine-Classes"] = "true"
		manifest.attributes["Can-Retransform-Classes"] = "true"
		manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
510
	}
C
Chris Beams 已提交
511 512
}

P
Phillip Webb 已提交
513 514
project("spring-context") {
	description = "Spring Context"
515

516
	apply plugin: "groovy"
517

518
	dependencies {
519 520 521 522 523
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
524
		optional(project(":spring-instrument"))
525
		optional("javax.inject:javax.inject:1")
526 527
		optional("javax.annotation:javax.annotation-api:${annotationApiVersion}")
		optional("javax.xml.ws:jaxws-api:${jaxwsVersion}")
528
		optional("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
529
		optional("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
530
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
531
		optional("javax.money:money-api:1.0.1")
J
Juergen Hoeller 已提交
532 533
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
		optional("javax.validation:validation-api:${beanvalVersion}")
534
		optional("org.hibernate:hibernate-validator:${hibval5Version}")
535 536
		optional("joda-time:joda-time:${jodaVersion}")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
537
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
538
		optional("org.beanshell:bsh:2.0b5")
539
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
540
		testCompile("org.apache.commons:commons-pool2:2.4.2")
541
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
542
		testCompile("javax.inject:javax.inject-tck:1")
543
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
544 545 546
		testRuntime("javax.el:javax.el-api:${elApiVersion}")
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
		testRuntime("org.javamoney:moneta:1.1")
547 548 549 550 551 552 553 554 555 556
	}
}

project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
557 558
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
		optional("javax.activation:activation:${activationApiVersion}")
559 560 561 562 563 564 565 566 567 568 569
		optional("org.codehaus.castor:castor-xml:1.4.1")  {
			exclude group: 'stax', module: 'stax-api'
			exclude group: "org.springframework", module: "spring-context"
		}
		optional("com.thoughtworks.xstream:xstream:${xstreamVersion}") {
			exclude group: 'xpp3', module: 'xpp3_min'
			exclude group: 'xmlpull', module: 'xmlpull'
		}
		optional("org.jibx:jibx-run:1.2.6")
		testCompile(project(":spring-context"))
		testCompile("xpp3:xpp3:1.1.4c")
570
		testCompile("org.codehaus.jettison:jettison:1.3.8") {
571 572
			exclude group: 'stax', module: 'stax-api'
		}
573
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
574 575
        testCompile(files(genCastor.classesDir).builtBy(genCastor))
        testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
576 577 578
		testRuntime("xerces:xercesImpl:2.11.0")  // for Castor
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
579
	}
580 581 582 583 584 585 586 587 588
}

project("spring-messaging") {
	description = "Spring Messaging"

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
589
		optional(project(":spring-oxm"))
590 591
		optional("io.projectreactor:reactor-core")
		optional("io.projectreactor.ipc:reactor-netty")
592
		optional("io.netty:netty-all:${nettyVersion}")
B
Brian Clozel 已提交
593
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
594 595
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
596
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
597
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
598
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
599
		testCompile("javax.inject:javax.inject-tck:1")
600
		testCompile("javax.servlet:javax.servlet-api:${servletVersion}")
J
Juergen Hoeller 已提交
601
		testCompile("javax.validation:validation-api:${beanvalVersion}")
602
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
603 604 605 606 607
		testCompile("org.apache.activemq:activemq-broker:5.8.0")
		testCompile("org.apache.activemq:activemq-kahadb-store:5.8.0") {
			exclude group: "org.springframework", module: "spring-context"
		}
		testCompile("org.apache.activemq:activemq-stomp:5.8.0")
B
Brian Clozel 已提交
608
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
609
			exclude group: "javax.servlet", module: "javax.servlet-api"
610
		}
611 612
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}")
613
		testCompile("io.netty:netty-all:${nettyVersion}")
614
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
615
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
S
Sebastien Deleuze 已提交
616 617
		testCompile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
		testCompile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
618
		testRuntime("javax.activation:activation:${activationApiVersion}")
619 620
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
621
	}
622 623 624 625 626

	if (JavaVersion.current().java9Compatible) {
		// Reactor2TcpClient's use of Netty requires access to sun.nio.ch.SelectorImpl
		test.jvmArgs(["--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"])
	}
C
Chris Beams 已提交
627 628
}

P
Phillip Webb 已提交
629 630
project("spring-tx") {
	description = "Spring Transaction"
631

632
	dependencies {
633 634
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
635
		optional(project(":spring-aop"))
636
		optional(project(":spring-context"))  // for JCA, @EnableTransactionManagement
637
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
J
Juergen Hoeller 已提交
638
		optional("javax.resource:javax.resource-api:${jcaVersion}")
639
		optional("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
640
		optional("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
641
		optional("com.ibm.websphere:uow:6.0.2.17")
642
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
643
		testCompile("org.eclipse.persistence:javax.persistence:${jpaVersion}")
644
		testCompile("org.codehaus.groovy:groovy-all:${groovyVersion}")
645
	}
C
Chris Beams 已提交
646 647
}

P
Phillip Webb 已提交
648 649
project("spring-jms") {
	description = "Spring JMS"
650

651
	dependencies {
652 653 654 655
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
656
		compile(project(":spring-messaging"))
657
		compile(project(":spring-tx"))
658
		provided("javax.jms:javax.jms-api:${jmsVersion}")
659
		optional(project(":spring-oxm"))
660
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
J
Juergen Hoeller 已提交
661
		optional("javax.resource:javax.resource-api:${jcaVersion}")
662
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
663
		testRuntime("javax.activation:activation:${activationApiVersion}")
664
	}
C
Chris Beams 已提交
665 666
}

P
Phillip Webb 已提交
667 668
project("spring-jdbc") {
	description = "Spring JDBC"
669

670
	dependencies {
671
		compile(project(":spring-beans"))
672
		compile(project(":spring-core"))
673
		compile(project(":spring-tx"))
674
		optional(project(":spring-context"))  // for JndiDataSourceLookup
675
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
P
Phillip Webb 已提交
676
		optional("org.hsqldb:hsqldb:${hsqldbVersion}")
677 678 679
		optional("com.h2database:h2:1.4.193")
		optional("org.apache.derby:derby:10.13.1.1")
		optional("org.apache.derby:derbyclient:10.13.1.1")
M
Mario Arias 已提交
680 681
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
682
	}
C
Chris Beams 已提交
683 684
}

P
Phillip Webb 已提交
685 686
project("spring-context-support") {
	description = "Spring Context Support"
687

688
	dependencies {
689 690 691
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
692 693
		optional(project(":spring-jdbc"))  // for Quartz support
		optional(project(":spring-tx"))  // for Quartz support
694
		optional("javax.activation:activation:${activationApiVersion}")
695
		optional("javax.mail:javax.mail-api:${javamailVersion}")
696
		optional("javax.cache:cache-api:${cacheApiVersion}")
B
Ben Manes 已提交
697
		optional("com.github.ben-manes.caffeine:caffeine:${caffeineVersion}")
698
		optional("net.sf.ehcache:ehcache:${ehcacheVersion}")
699
		optional("org.quartz-scheduler:quartz:${quartzVersion}")
700
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
701
		optional("org.freemarker:freemarker:${freemarkerVersion}")
702
		optional("com.lowagie:itext:2.1.7")
703
		testCompile(project(":spring-context"))
704
		testCompile("org.apache.poi:poi:${poiVersion}")
P
Phillip Webb 已提交
705
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
706
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
707
		testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
708
		testRuntime("org.ehcache:jcache:${ehcachejcacheVersion}")
709
	}
C
Chris Beams 已提交
710 711
}

712 713 714 715 716 717 718 719 720 721 722
project("spring-context-indexer") {
	description = "Spring Context Indexer"

	dependencies {
		testCompile(project(":spring-context"))
		testCompile("javax.inject:javax.inject:1")
		testCompile("javax.annotation:javax.annotation-api:${annotationApiVersion}")
		testCompile("org.eclipse.persistence:javax.persistence:${jpaVersion}")
	}
}

P
Phillip Webb 已提交
723 724
project("spring-web") {
	description = "Spring Web"
S
Sebastien Deleuze 已提交
725

726
	apply plugin: "groovy"
727

728
	dependencies {
729 730
		compile(project(":spring-aop"))  // for JaxWsPortProxyFactoryBean
		compile(project(":spring-beans"))  // for MultipartFilter
731
		compile(project(":spring-context"))
732
		compile(project(":spring-core"))
733
		provided "javax.servlet:javax.servlet-api:${servletVersion}"
734
		optional(project(":spring-oxm"))  // for MarshallingHttpMessageConverter
735
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
736
		optional("javax.el:javax.el-api:${elApiVersion}")
737
		optional("javax.faces:javax.faces-api:${jsfVersion}")
J
Juergen Hoeller 已提交
738
		optional("javax.validation:validation-api:${beanvalVersion}")
739
		optional("javax.activation:activation:${activationApiVersion}")
740
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
741
		optional("com.caucho:hessian:4.0.38")
742
		optional("commons-fileupload:commons-fileupload:${fileuploadVersion}")
743 744 745
		optional("org.reactivestreams:reactive-streams")
		optional("io.projectreactor:reactor-core")
		optional("io.projectreactor.ipc:reactor-netty")
J
Juergen Hoeller 已提交
746
		optional("io.reactivex:rxnetty-http:${rxnettyVersion}") {
747 748
			exclude group: 'io.reactivex', module: 'rxjava'
		}
749
		optional("io.reactivex:rxjava:${rxjavaVersion}")
S
Sebastien Deleuze 已提交
750
		optional "io.reactivex.rxjava2:rxjava:${rxjava2Version}"
751
		optional("io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}")
B
Brian Clozel 已提交
752
		optional("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
753
		optional("io.undertow:undertow-core:${undertowVersion}")
754
		optional("org.jboss.xnio:xnio-api:${xnioVersion}")
755 756
		optional("io.netty:netty-buffer:${nettyVersion}")  // temporarily for JsonObjectDecoder
	  	optional("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") {  // woodstox before aalto
757 758
			exclude group: "stax", module: "stax-api"
		}
759
		optional("com.fasterxml:aalto-xml:1.0.0")
760 761
		optional("org.apache.httpcomponents:httpclient:${httpclientVersion}")
		optional("org.apache.httpcomponents:httpasyncclient:${httpasyncVersion}")
762
		optional("io.netty:netty-all:${nettyVersion}")
763
		optional("com.squareup.okhttp:okhttp:${okhttpVersion}")
764
		optional("com.squareup.okhttp3:okhttp:${okhttp3Version}")
765
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
766
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
767 768
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-smile:${jackson2Version}")
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${jackson2Version}")
R
Roy Clarkson 已提交
769
		optional("com.google.code.gson:gson:${gsonVersion}")
770
		optional("com.rometools:rome:${romeVersion}")
B
Brian Clozel 已提交
771
		optional("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
772
			exclude group: "javax.servlet", module: "javax.servlet-api"
773
		}
B
Brian Clozel 已提交
774
		optional("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
775
			exclude group: "javax.servlet", module: "javax.servlet-api"
776
		}
777 778
		optional("com.google.protobuf:protobuf-java:${protobufVersion}")
		optional("com.google.protobuf:protobuf-java-util:${protobufVersion}")
779
		optional("com.googlecode.protobuf-java-format:protobuf-java-format:1.4")
780 781
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
		optional("javax.xml.ws:jaxws-api:${jaxwsVersion}")
782
		optional("javax.mail:javax.mail-api:${javamailVersion}")
783
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
784
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
785
		testCompile("io.projectreactor.addons:reactor-test")
786 787 788
		testCompile("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {
			exclude group: "org.apache.taglibs", module: "taglibs-standard-spec"
		}
789
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-joda:${jackson2Version}")
790
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2Version}")
791
		testCompile("com.fasterxml.jackson.module:jackson-module-kotlin:${jackson2Version}")
792 793 794 795
		testCompile("org.apache.tomcat:tomcat-util:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}")
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}")
796 797 798
		testCompile("com.squareup.okhttp3:mockwebserver:${okhttp3Version}")
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
S
Sebastien Deleuze 已提交
799
		testCompile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
800
		testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
801 802
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
803
		testRuntime("org.jboss.xnio:xnio-nio:${xnioVersion}")
804
		testRuntime("org.jboss.logging:jboss-logging:3.3.0.Final")
805
	}
806 807 808 809 810

	if (JavaVersion.current().java9Compatible) {
		// Netty4ClientHttpRequestFactory requires access to sun.nio.ch.SelectorImpl
		test.jvmArgs(["--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"])
	}
811 812
}

813 814
project("spring-webflux") {
	description = "Spring WebFlux"
815

816 817 818
	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-web"))
819 820
		compile "org.reactivestreams:reactive-streams"
		compile "io.projectreactor:reactor-core"
821 822
		optional(project(":spring-context-support"))  // for FreeMarker support
		provided "javax.servlet:javax.servlet-api:${servletVersion}"
823
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
824 825
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		optional("org.freemarker:freemarker:${freemarkerVersion}")
826
		optional "org.apache.httpcomponents:httpclient:${httpclientVersion}"
827
		optional('org.webjars:webjars-locator:0.32')
828
		optional("io.projectreactor.ipc:reactor-netty")
829 830 831 832 833
		optional("io.reactivex:rxnetty-http:${rxnettyVersion}") {
			exclude group: 'io.reactivex', module: 'rxjava'
		}
		optional("io.reactivex:rxjava:${rxjavaVersion}")
		optional("io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}")
834 835 836 837 838
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
		optional("org.apache.tomcat:tomcat-websocket:${tomcatVersion}") {
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
839 840 841
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
			exclude group: "javax.servlet", module: "javax.servlet"
		}
842 843 844
		optional("io.undertow:undertow-websockets-jsr:${undertowVersion}") {
			exclude group: "org.jboss.spec.javax.websocket", module: "jboss-websocket-api_1.1_spec"
		}
845 846
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
847
		testCompile("io.projectreactor.addons:reactor-test")
848
		testCompile("javax.validation:validation-api:${beanvalVersion}")
R
Rossen Stoyanchev 已提交
849
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
850 851 852 853
		testCompile("org.apache.tomcat:tomcat-util:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}")
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}")
S
Sebastien Deleuze 已提交
854
		testCompile "io.reactivex.rxjava2:rxjava:${rxjava2Version}"
855
		testCompile("io.undertow:undertow-core:${undertowVersion}")
856
		testCompile("org.jboss.xnio:xnio-api:${xnioVersion}")
857
		testCompile("com.fasterxml:aalto-xml:1.0.0")
858
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
859
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
B
Brian Clozel 已提交
860
		testCompile("com.squareup.okhttp3:mockwebserver:${okhttp3Version}")
861 862
		testRuntime("javax.el:javax.el-api:${elApiVersion}")
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
863 864 865
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
866
		testRuntime("org.jboss.xnio:xnio-nio:${xnioVersion}")
867
		testRuntime("org.jboss.logging:jboss-logging:3.3.0.Final")
868
		testRuntime("org.webjars:underscorejs:1.8.3")
869
		testRuntime("org.jruby:jruby:9.1.7.0")
870
		testRuntime("org.python:jython-standalone:2.5.3")
871 872 873 874
		// Ideally, kotlin-script-runtime should be enough for JSR-223, but that's not
		// the case yet, so we depend on kotlin-script-util and exclude these
		// dependencies only used for artifact retrieval. Point raised to Kotlin team.
		testRuntime("org.jetbrains.kotlin:kotlin-compiler:${kotlinVersion}")
875
		testCompile("org.jetbrains.kotlin:kotlin-script-runtime:${kotlinVersion}")
876 877 878 879 880
		testRuntime("org.jetbrains.kotlin:kotlin-script-util:${kotlinVersion}") {
			exclude group: "com.jcabi", module: "jcabi-aether"
			exclude group: "org.apache.maven", module: "maven-core"
			exclude group: "org.sonatype.aether", module: "aether-api"
		}
881
	}
882 883 884 885 886

	if (JavaVersion.current().java9Compatible) {
		// ReactorClientHttpConnector requires access to sun.nio.ch.SelectorImpl
		test.jvmArgs(["--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"])
	}
C
Chris Beams 已提交
887 888
}

P
Phillip Webb 已提交
889 890
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
891

892
	dependencies {
893 894 895 896 897 898 899
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-jdbc"))
		compile(project(":spring-tx"))
		optional(project(":spring-aop"))
		optional(project(":spring-context"))
		optional(project(":spring-web"))
J
Juergen Hoeller 已提交
900
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
901 902
		optional("org.eclipse.persistence:org.eclipse.persistence.core:${eclipselinkVersion}")
		optional("org.eclipse.persistence:org.eclipse.persistence.jpa:${eclipselinkVersion}") {
903 904
			exclude group: 'org.eclipse.persistence', module: 'javax.persistence'
		}
905
		optional("org.hibernate:hibernate-core:${hibernate5Version}")
906
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
S
Sam Brannen 已提交
907
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
P
Phillip Webb 已提交
908
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
909
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
910
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
911
	}
C
Chris Beams 已提交
912 913
}

P
Phillip Webb 已提交
914 915
project("spring-webmvc") {
	description = "Spring Web MVC"
916

917
	dependencies {
918
		compile(project(":spring-aop"))
919 920
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
921
		compile(project(":spring-core"))
922
		compile(files(project(":spring-core").objenesisRepackJar))
923 924
		compile(project(":spring-expression"))
		compile(project(":spring-web"))
925
		provided("javax.servlet:javax.servlet-api:${servletVersion}")
926
		optional(project(":spring-context-support"))  // for FreeMarker support
927
		optional(project(":spring-oxm"))  // for MarshallingView
928
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
929
		optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1")
930
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
931 932
		optional("org.apache.poi:poi:${poiVersion}")
		optional("org.apache.poi:poi-ooxml:${poiVersion}")
933
		optional("org.freemarker:freemarker:${freemarkerVersion}")
934
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
935 936
		optional("com.lowagie:itext:2.1.7")
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
937
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
938 939
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-smile:${jackson2Version}")
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${jackson2Version}")
940
		optional("com.rometools:rome:${romeVersion}")
941
		optional("javax.el:javax.el-api:${elApiVersion}")
942 943
		optional("org.apache.tiles:tiles-api:${tiles3Version}")
		optional("org.apache.tiles:tiles-core:${tiles3Version}") {
944 945
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
946
		optional("org.apache.tiles:tiles-servlet:${tiles3Version}") {
947 948
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
949
		optional("org.apache.tiles:tiles-jsp:${tiles3Version}") {
950 951
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
952
		optional("org.apache.tiles:tiles-el:${tiles3Version}") {
953 954
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
955
		optional("org.apache.tiles:tiles-extras:${tiles3Version}") {
956 957 958
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
			exclude group: "org.springframework", module: "spring-web"
		}
959
		optional('org.webjars:webjars-locator:0.32')
960
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
961
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
962
			exclude group: "xml-apis", module: "xml-apis"
963 964
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
965 966 967
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
968
		}
B
Brian Clozel 已提交
969
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
970
			exclude group: "javax.servlet", module: "javax.servlet"
971
		}
B
Brian Clozel 已提交
972
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
973
			exclude group: "javax.servlet", module: "javax.servlet"
974
		}
J
Juergen Hoeller 已提交
975
		testCompile("javax.validation:validation-api:${beanvalVersion}")
976
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
977 978
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}")
		testCompile("commons-fileupload:commons-fileupload:${fileuploadVersion}")
979
		testCompile("commons-io:commons-io:1.3")
980
		testCompile("joda-time:joda-time:${jodaVersion}")
981
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
982
		testCompile("org.mozilla:rhino:1.7.7.1")
983
		testRuntime("org.jruby:jruby:9.1.7.0")
984
		testRuntime("org.python:jython-standalone:2.5.3")
985 986 987
		// Ideally, kotlin-script-runtime should be enough for JSR-223, but that's not
		// the case yet, so we depend on kotlin-script-util and exclude these
		// dependencies only used for artifact retrieval. Point raised to Kotlin team.
988
		testRuntime("org.jetbrains.kotlin:kotlin-compiler:${kotlinVersion}")
989
		testCompile("org.jetbrains.kotlin:kotlin-script-runtime:${kotlinVersion}")
990 991 992 993 994
		testRuntime("org.jetbrains.kotlin:kotlin-script-util:${kotlinVersion}") {
			exclude group: "com.jcabi", module: "jcabi-aether"
			exclude group: "org.apache.maven", module: "maven-core"
			exclude group: "org.sonatype.aether", module: "aether-api"
		}
995
		testRuntime("org.webjars:underscorejs:1.8.3")
996
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
997 998 999
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
1000 1001 1002
	}
}

1003 1004 1005 1006 1007 1008 1009 1010 1011
project("spring-websocket") {
	description = "Spring WebSocket"

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
		optional(project(":spring-messaging"))
		optional(project(":spring-webmvc"))
1012 1013
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037
		optional("org.apache.tomcat:tomcat-websocket:${tomcatVersion}") {
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
		optional("org.glassfish.tyrus:tyrus-spi:${tyrusVersion}")
		optional("org.glassfish.tyrus:tyrus-core:${tyrusVersion}")
		optional("org.glassfish.tyrus:tyrus-server:${tyrusVersion}")
		optional("org.glassfish.tyrus:tyrus-container-servlet:${tyrusVersion}")
		optional("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
			exclude group: "javax.servlet", module: "javax.servlet"
		}
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
			exclude group: "javax.servlet", module: "javax.servlet"
		}
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
		optional("org.eclipse.jetty:jetty-client:${jettyVersion}")
		optional("io.undertow:undertow-core:${undertowVersion}")
		optional("io.undertow:undertow-servlet:${undertowVersion}") {
			exclude group: "org.jboss.spec.javax.servlet", module: "jboss-servlet-api_3.1_spec"
			exclude group: "org.jboss.spec.javax.annotation", module: "jboss-annotations-api_1.2_spec"
		}
		optional("io.undertow:undertow-websockets-jsr:${undertowVersion}") {
			exclude group: "org.jboss.spec.javax.websocket", module: "jboss-websocket-api_1.1_spec"
		}
1038
		optional("org.jboss.xnio:xnio-api:${xnioVersion}")
1039 1040 1041
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}")
1042 1043
		testCompile("io.projectreactor:reactor-core")
		testCompile("io.projectreactor.ipc:reactor-netty")
1044 1045
		testCompile("io.netty:netty-all:${nettyVersion}")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
1046
		testRuntime("org.jboss.xnio:xnio-nio:${xnioVersion}")
1047
		testRuntime("org.jboss.logging:jboss-logging:3.3.0.Final")
1048
	}
1049 1050 1051 1052 1053

	if (JavaVersion.current().java9Compatible) {
		// Reactor2TcpClient's use of Netty requires access to sun.nio.ch.SelectorImpl
		test.jvmArgs(["--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"])
	}
1054 1055
}

P
Phillip Webb 已提交
1056 1057
project("spring-test") {
	description = "Spring TestContext Framework"
1058

1059
	dependencies {
1060
		compile(project(":spring-core"))
1061 1062 1063 1064 1065 1066 1067
		optional(project(":spring-beans"))
		optional(project(":spring-context"))
		optional(project(":spring-jdbc"))
		optional(project(":spring-tx"))
		optional(project(":spring-orm"))
		optional(project(":spring-web"))
		optional(project(":spring-webmvc"))
1068
		optional(project(":spring-webflux"))
1069
		optional(project(":spring-websocket"))
1070
		optional("junit:junit:${junitVersion}")
1071
		optional("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
1072
		optional("org.testng:testng:${testngVersion}")
1073
		optional("javax.inject:javax.inject:1")
1074 1075
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
1076 1077 1078 1079
		optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1")
		optional("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {
			exclude group: "org.apache.taglibs", module: "taglibs-standard-spec"
		}
1080
		optional("javax.el:javax.el-api:${elApiVersion}")
1081
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
1082 1083
		optional("javax.activation:activation:${activationApiVersion}")
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
1084
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
S
Sam Brannen 已提交
1085
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
1086
		optional("org.hamcrest:hamcrest-core:${hamcrestVersion}")
1087
		optional("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
1088
		optional("net.sourceforge.htmlunit:htmlunit:2.24")
1089 1090
		optional("org.seleniumhq.selenium:htmlunit-driver:2.23.2")
		optional("org.seleniumhq.selenium:selenium-java:3.0.1") {
1091 1092
			exclude group: "io.netty", module: "netty"
		}
1093
		optional("org.skyscreamer:jsonassert:1.4.0")
1094
		optional("com.jayway.jsonpath:json-path:2.2.0")
1095 1096
		optional("org.reactivestreams:reactive-streams")
		optional("io.projectreactor:reactor-core")
1097
		optional("io.projectreactor.addons:reactor-test")
1098 1099
		testCompile(project(":spring-context-support"))
		testCompile(project(":spring-oxm"))
1100
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
1101
		testCompile("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
1102
		testCompile("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
1103
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
1104
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
1105 1106
		// Enable use of the JUnitPlatform Runner
		testCompile("org.junit.platform:junit-platform-runner:${junitPlatformVersion}")
1107
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
1108
		testCompile("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
1109
		testCompile("com.rometools:rome:${romeVersion}")
1110 1111
		testCompile("org.apache.tiles:tiles-api:${tiles3Version}")
		testCompile("org.apache.tiles:tiles-core:${tiles3Version}") {
1112 1113
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
1114
		testCompile("org.apache.tiles:tiles-servlet:${tiles3Version}") {
1115 1116
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
1117
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
S
Sam Brannen 已提交
1118
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
1119
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}")
1120
		testCompile("javax.cache:cache-api:${cacheApiVersion}")
1121
		testCompile('de.bechte.junit:junit-hierarchicalcontextrunner:4.12.1')
1122
		testCompile('io.projectreactor.ipc:reactor-netty')
1123
		testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")
1124
		testRuntime("org.apache.logging.log4j:log4j-jul:${log4jVersion}")  // Java Util Logging for JUnit 5
1125
		testRuntime("org.ehcache:ehcache:${ehcache3Version}")
J
Juergen Hoeller 已提交
1126
		testRuntime("org.terracotta:management-model:2.0.0")
1127 1128
		testRuntime("javax.el:javax.el-api:${elApiVersion}")
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
1129 1130
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
1131
	}
1132 1133

	task testNG(type: Test) {
1134
		description = 'Runs TestNG tests.'
1135
		useTestNG()
1136
		scanForTestClasses = false
1137 1138
		include(["**/testng/**/*Tests.class", "**/testng/**/*Test.class"])
		// Show STD_OUT & STD_ERR of the test JVM(s) on the console:
1139
		// testLogging.showStandardStreams = true
1140
		// forkEvery 1
1141
		reports.junitXml.destination = file("$buildDir/test-results")
1142 1143 1144
	}

	test {
1145
		description = 'Runs JUnit tests.'
1146 1147
		dependsOn testNG
		useJUnit()
1148 1149 1150
		scanForTestClasses = false
		include(['**/*Tests.class', '**/*Test.class', '**/SpringJUnitJupiterTestSuite.class'])
		exclude(['**/testng/**/*.*'])
1151 1152
		// Java Util Logging for JUnit 5.
		// systemProperty('java.util.logging.manager', 'org.apache.logging.log4j.jul.LogManager')
1153
		reports.junitXml.destination = file("$buildDir/test-results")
1154
	}
1155 1156

	task aggregateTestReports(type: TestReport) {
1157
		description = 'Aggregates JUnit and TestNG test reports.'
1158 1159 1160 1161 1162
		destinationDir = test.reports.html.destination
		reportOn test, testNG
	}

	check.dependsOn aggregateTestReports
C
Chris Beams 已提交
1163 1164
}

P
Phillip Webb 已提交
1165 1166 1167
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
1168

1169
	dependencies {
1170
		aspects(project(":spring-orm"))
1171 1172 1173
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
1174
		provided("org.eclipse.persistence:javax.persistence:${jpaVersion}")
1175 1176 1177 1178 1179 1180
		optional(project(":spring-aop"))  // for @Async support
		optional(project(":spring-beans"))  // for @Configurable support
		optional(project(":spring-context"))  // for @Enable* support
		optional(project(":spring-context-support"))  // for JavaMail and JSR-107 support
		optional(project(":spring-orm"))  // for JPA exception translation support
		optional(project(":spring-tx"))  // for JPA, @Transactional support
1181
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")  // for @javax.transaction.Transactional support
1182
		optional("javax.cache:cache-api:${cacheApiVersion}")
1183
		testCompile(project(":spring-core"))  // for CodeStyleAspect
1184
		testCompile(project(":spring-test"))
1185
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
1186
	}
1187

1188
	eclipse.project {
P
Phillip Webb 已提交
1189
		natures += "org.eclipse.ajdt.ui.ajnature"
1190
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
1191
	}
C
Chris Beams 已提交
1192 1193
}

1194 1195
project("spring-framework-bom") {
	description = "Spring Framework (Bill of Materials)"
1196

1197 1198 1199 1200 1201
	dependencyManagement {
		generatedPomCustomization {
			enabled = false
		}
	}
1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234

	configurations.archives.artifacts.clear()
	artifacts {
		// work around GRADLE-2406 by attaching text artifact
		archives(file("spring-framework-bom.txt"))
	}

	install {
		repositories.mavenInstaller {
			pom.whenConfigured {
				packaging = "pom"
				withXml {
					asNode().children().last() + {
						delegate.dependencyManagement {
							delegate.dependencies {
								parent.subprojects.sort { "$it.name" }.each { p ->
									if (p.hasProperty("merge") && p.merge.into == null && p != project) {
										delegate.dependency {
											delegate.groupId(p.group)
											delegate.artifactId(p.name)
											delegate.version(p.version)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

1235 1236
sonarqube {
	properties {
S
Stephane Nicoll 已提交
1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248
		property "sonar.projectName", "Spring Framework"
		property "sonar.profile", "Spring Framework"
		property "sonar.jacoco.reportPath", "${buildDir.name}/jacoco.exec"
		property "sonar.links.homepage", linkHomepage
		property "sonar.links.ci", linkCi
		property "sonar.links.issue", linkIssue
		property "sonar.links.scm", linkScmUrl
		property "sonar.links.scm_dev", linkScmDevConnection
		property "sonar.java.coveragePlugin", "jacoco"
	}
}

1249
configure(rootProject) {
P
Phillip Webb 已提交
1250
	description = "Spring Framework"
1251

B
Brian Clozel 已提交
1252
	apply plugin: "org.asciidoctor.convert"
1253
	apply plugin: "docbook-reference"
1254
	apply plugin: "groovy"
R
Rob Winch 已提交
1255
	apply plugin: "io.spring.dependency-management"
R
Rob Winch 已提交
1256

1257
	// apply plugin: "detect-split-packages"
1258 1259
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
1260 1261 1262 1263 1264 1265 1266 1267 1268 1269
	dependencyManagement {
		imports {
			mavenBom "io.projectreactor:reactor-bom:${reactorVersion}"
		}
		resolutionStrategy {
			cacheChangingModulesFor 0, 'seconds'
		}
		applyMavenExclusions = false
	}

R
Rob Winch 已提交
1270
	asciidoctor {
B
Brian Clozel 已提交
1271 1272
		sourceDir project.file('src/asciidoc')
		separateOutputDirs = false
1273
		backends = ['docbook']
B
Brian Clozel 已提交
1274
		options doctype: 'book', eruby: 'erubis'
J
Juergen Hoeller 已提交
1275
		attributes 'spring-version': project.version, 'revnumber': project.version, 'docinfo': ""
1276 1277
	}

1278 1279 1280
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
1281
		epubFilename = "spring-framework-reference.epub"
1282 1283 1284 1285 1286 1287 1288
		expandPlaceholders = ""
	}

	afterEvaluate {
		tasks.findAll { it.name.startsWith("reference") }.each{ it.dependsOn.add("asciidoctor") }
	}

1289 1290 1291 1292 1293
	// TODO: DetectSplitPackagesPlugin fails in line 154 due to method not found on java.io.File.
	// TODO: Possibly related to user rights or OS differences; passes on local Windows machine.
	// detectSplitPackages {
	//	projectsToScan -= project(":spring-instrument-tomcat")
	// }
1294

C
Chris Beams 已提交
1295
	// don't publish the default jar for the root project
1296 1297
	configurations.archives.artifacts.clear()

1298
	dependencies {  // for integration tests
1299
		testCompile(project(":spring-aop"))
1300
		testCompile(project(":spring-beans"))
1301
		testCompile(project(":spring-context"))
1302 1303
		testCompile(project(":spring-core"))
		testCompile(project(":spring-expression"))
1304
		testCompile(project(":spring-jdbc"))
1305
		testCompile(project(":spring-orm"))
1306
		testCompile(project(":spring-test"))
1307
		testCompile(project(":spring-tx"))
1308
		testCompile(project(":spring-web"))
1309
		testCompile("javax.servlet:javax.servlet-api:${servletVersion}")
1310
		testCompile("javax.inject:javax.inject:1")
J
Juergen Hoeller 已提交
1311
		testCompile("javax.resource:javax.resource-api:${jcaVersion}")
1312
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
1313
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
P
Phillip Webb 已提交
1314
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
1315 1316 1317
	}

	task api(type: Javadoc) {
P
Phillip Webb 已提交
1318 1319
		group = "Documentation"
		description = "Generates aggregated Javadoc API documentation."
1320
		title = "${rootProject.description} ${version} API"
C
Chris Beams 已提交
1321

1322 1323 1324 1325 1326
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
1327 1328 1329
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
1330
		options.overview = "src/api/overview.html"
1331
		options.stylesheetFile = file("src/api/stylesheet.css")
1332
		options.splitIndex = true
C
Chris Beams 已提交
1333
		options.links(project.ext.javadocLinks)
1334
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
1335

1336 1337 1338
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
1339

P
Phillip Webb 已提交
1340
		maxMemory = "1024m"
C
Chris Beams 已提交
1341
		destinationDir = new File(buildDir, "api")
1342 1343 1344

		doFirst {
			classpath = files(
J
Juergen Hoeller 已提交
1345
				// Ensure the javadoc process can resolve types compiled from .aj sources
1346 1347 1348 1349
				project(":spring-aspects").sourceSets.main.output
			)
			classpath += files(subprojects.collect { it.sourceSets.main.compileClasspath })
		}
1350 1351
	}

1352
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1353 1354 1355
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1356 1357 1358
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1359 1360
		from("src/dist") {
			include "changelog.txt"
1361 1362 1363
		}

		from (api) {
1364
			into "javadoc-api"
1365 1366
		}

1367 1368
		from (reference) {
			into "spring-framework-reference"
1369 1370 1371 1372
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1373 1374 1375
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1376 1377
		description = "Builds -${classifier} archive containing all " +
			"XSDs for deployment at http://springframework.org/schema."
S
Stephane Nicoll 已提交
1378
		duplicatesStrategy 'exclude'
1379
		moduleProjects.each { subproject ->
1380 1381 1382
			def Properties schemas = new Properties();

			subproject.sourceSets.main.resources.find {
P
Phillip Webb 已提交
1383
				it.path.endsWith("META-INF/spring.schemas")
1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400
			}?.withInputStream { schemas.load(it) }

			for (def key : schemas.keySet()) {
				def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
				assert shortName != key
				File xsdFile = subproject.sourceSets.main.resources.find {
					it.path.endsWith(schemas.get(key))
				}
				assert xsdFile != null
				into (shortName) {
					from xsdFile.path
				}
			}
		}
	}

	task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) {
P
Phillip Webb 已提交
1401 1402 1403
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1404
		description = "Builds -${classifier} archive, containing all jars and docs, " +
J
Juergen Hoeller 已提交
1405
			"suitable for community download page."
1406 1407 1408

		ext.baseDir = "${baseName}-${project.version}";

P
Phillip Webb 已提交
1409 1410 1411 1412
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1413
			into "${baseDir}"
P
Phillip Webb 已提交
1414
			expand(copyright: new Date().format("yyyy"), version: project.version)
1415 1416 1417 1418 1419 1420 1421 1422 1423 1424
		}

		from(zipTree(docsZip.archivePath)) {
			into "${baseDir}/docs"
		}

		from(zipTree(schemaZip.archivePath)) {
			into "${baseDir}/schema"
		}

1425
		moduleProjects.each { subproject ->
1426 1427
			into ("${baseDir}/libs") {
				from subproject.jar
P
Phillip Webb 已提交
1428
				if (subproject.tasks.findByPath("sourcesJar")) {
1429 1430
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1431
				if (subproject.tasks.findByPath("javadocJar")) {
1432 1433 1434 1435 1436 1437
					from subproject.javadocJar
				}
			}
		}
	}

1438
	// Create a distribution that contains all dependencies (required and optional).
1439 1440
	// Not published by default; only for use when building from source.
	task depsZip(type: Zip, dependsOn: distZip) { zipTask ->
P
Phillip Webb 已提交
1441 1442 1443
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1444 1445 1446 1447 1448 1449 1450 1451 1452 1453
		description = "Builds -${classifier} archive, containing everything " +
			"in the -${distZip.classifier} archive plus all runtime dependencies."

		from zipTree(distZip.archivePath)

		gradle.taskGraph.whenReady { taskGraph ->
			if (taskGraph.hasTask(":${zipTask.name}")) {
				def projectNames = rootProject.subprojects*.name
				def artifacts = new HashSet()
				subprojects.each { subproject ->
1454 1455
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476
						def dependency = artifact.moduleVersion.id
						if (!projectNames.contains(dependency.name)) {
							artifacts << artifact.file
						}
					}
				}

				zipTask.from(artifacts) {
					into "${distZip.baseDir}/deps"
				}
			}
		}
	}

	artifacts {
		archives docsZip
		archives schemaZip
		archives distZip
	}

	task wrapper(type: Wrapper) {
P
Phillip Webb 已提交
1477
		description = "Generates gradlew[.bat] scripts"
J
Juergen Hoeller 已提交
1478
		gradleVersion = '3.3'
1479 1480

		doLast() {
1481
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1482
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1483
			File wrapperFile = file("gradlew")
1484 1485
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1486
			File wrapperBatFile = file("gradlew.bat")
1487 1488 1489 1490
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1491

1492
}
1493

S
Stephane Nicoll 已提交
1494
configure([project(':spring-build-src'), project(':spring-framework-bom')]) {
1495
	sonarqube {
S
Stephane Nicoll 已提交
1496 1497 1498 1499 1500
		skipProject = true
	}
}

configure(project(':spring-core')) {
1501 1502
	sonarqube {
		properties {
S
Stephane Nicoll 已提交
1503 1504 1505 1506 1507 1508
			property "sonar.exclusions",
					"src/main/java/org/springframework/cglib/**/*,src/main/java/org/springframework/asm/**/*"
		}
	}
}

1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524
/*
 * Copyright 2002-2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535
/*
 * 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-")) {
1536
			return version.replace('BUILD', qualifier)
1537 1538
		}
	}
1539
	return version
1540
}