build.gradle 47.6 KB
Newer Older
1
buildscript {
2
	repositories {
B
Brian Clozel 已提交
3
		maven { url "https://repo.spring.io/plugins-release" }
4 5
	}
	dependencies {
S
Sam Brannen 已提交
6
		classpath("org.springframework.build.gradle:propdeps-plugin:0.0.7")
B
Brian Clozel 已提交
7
		classpath("org.asciidoctor:asciidoctor-gradle-plugin:1.5.2")
8
		classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
9
		classpath("ws.antonov.gradle.plugins:gradle-plugin-protobuf:0.9.1")
10
	}
11 12
}

13 14 15 16
plugins {
	id "org.sonarqube" version "1.1"
}

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

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

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

34
	ext.aspectjVersion       = "1.8.9"
J
Juergen Hoeller 已提交
35
	ext.beanvalVersion       = "1.1.0.Final"
36
	ext.caffeineVersion      = "2.3.1"
37
	ext.eclipselinkVersion   = "2.6.3"
38
	ext.ehcacheVersion       = "2.10.2"
39
	ext.ehcachejcacheVersion = "1.0.1"
40
	ext.ehcache3Version      = "3.1.0"
41
	ext.ejbVersion           = "3.0"
42
	ext.fileuploadVersion    = "1.3.2"
43
	ext.freemarkerVersion    = "2.3.23"
J
Juergen Hoeller 已提交
44
	ext.groovyVersion        = "2.4.7"
45
	ext.gsonVersion          = "2.7"
46
	ext.hamcrestVersion      = "1.3"
J
Juergen Hoeller 已提交
47
	ext.hibernate5Version    = "5.2.1.Final"
48
	ext.hibval5Version       = "5.2.4.Final"
49
	ext.hsqldbVersion        = "2.3.4"
50
	ext.httpasyncVersion     = "4.1.2"
51
	ext.httpclientVersion    = "4.5.2"
52
	ext.jackson2Version      = "2.8.0"
53
	ext.javamailVersion      = "1.5.5"
J
Juergen Hoeller 已提交
54
	ext.jcaVersion           = "1.7"
55
	ext.jettyVersion         = "9.3.10.v20160621"
56
	ext.jodaVersion          = "2.9.4"
J
Juergen Hoeller 已提交
57
	ext.jpaVersion           = "2.1.1"
58
	ext.jtaVersion           = "1.2"
J
Juergen Hoeller 已提交
59
	ext.junitVersion         = "4.12"
S
Sam Brannen 已提交
60 61
	ext.junitJupiterVersion  = '5.0.0-M1'
	ext.junitPlatformVersion = '1.0.0-M1'
62
	ext.log4jVersion         = '2.6.1'
63
	ext.nettyVersion         = "4.1.1.Final"
64
	ext.okhttpVersion        = "2.7.5"
65
	ext.okhttp3Version       = "3.3.1"
66
	ext.poiVersion           = "3.14"
R
Rossen Stoyanchev 已提交
67
	ext.reactorVersion       = "2.0.8.RELEASE"
68 69 70
	ext.reactorCoreVersion   = '2.5.0.BUILD-SNAPSHOT'
	ext.reactorNettyVersion  = '2.5.0.BUILD-SNAPSHOT'
	ext.rxJavaVersion        = '1.1.6'
71 72
	ext.romeVersion          = "1.6.0"
	ext.slf4jVersion         = "1.7.21"
73
	ext.snakeyamlVersion     = "1.17"
74
	ext.snifferVersion       = "1.15"
75
	ext.testngVersion        = "6.9.10"
76
	ext.tiles3Version        = "3.0.5"
77
	ext.tomcatVersion        = "8.5.3"
78
	ext.tyrusVersion         = "1.13"
79
	ext.undertowVersion      = "1.4.0.CR3"
80
	ext.woodstoxVersion      = "5.0.2"
81
	ext.xmlunitVersion       = "1.6"
J
Juergen Hoeller 已提交
82
	ext.xstreamVersion       = "1.4.9"
83

84
	ext.gradleScriptDir = "${rootProject.projectDir}/gradle"
85

86
	apply plugin: "propdeps"
P
Phillip Webb 已提交
87
	apply plugin: "java"
88
	apply plugin: "test-source-set-dependencies"
89
	apply from: "${gradleScriptDir}/ide.gradle"
C
Chris Beams 已提交
90

S
Stephane Nicoll 已提交
91 92 93 94 95
	configurations {
		sniffer
		javaApiSignature
	}

96 97 98 99 100 101 102 103 104 105 106 107
	configurations.all {
		// check for updates every build
		resolutionStrategy.cacheChangingModulesFor 0, 'seconds'

		// consistent netty version (e.g. clashes between netty-all vs netty-common)
		resolutionStrategy.eachDependency { DependencyResolveDetails details ->
			if (details.requested.group == 'io.netty') {
				details.useVersion nettyVersion
			}
		}
	}

P
Phillip Webb 已提交
108 109 110
	compileJava.options*.compilerArgs = [
		"-Xlint:serial", "-Xlint:varargs", "-Xlint:cast", "-Xlint:classfile",
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
S
Stephane Nicoll 已提交
111
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
P
Phillip Webb 已提交
112
		"-Xlint:try", "-Xlint:fallthrough", "-Xlint:rawtypes", "-Xlint:deprecation",
113
		"-Xlint:unchecked", "-Xlint:-options", "-Werror"
114
	]
C
Chris Beams 已提交
115

P
Phillip Webb 已提交
116
	compileTestJava.options*.compilerArgs = [
117
		"-Xlint:serial", "-Xlint:-varargs", "-Xlint:cast", "-Xlint:classfile",
P
Phillip Webb 已提交
118
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
S
Stephane Nicoll 已提交
119
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
P
Phillip Webb 已提交
120 121 122
		"-Xlint:try", "-Xlint:-fallthrough", "-Xlint:-rawtypes", "-Xlint:-deprecation",
		"-Xlint:-unchecked", "-Xlint:-options"]

123
	compileJava {
124 125
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
126 127 128
	}

	compileTestJava {
J
Juergen Hoeller 已提交
129 130
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
131
		options.compilerArgs += "-parameters"
J
Juergen Hoeller 已提交
132 133
	}

C
Chris Beams 已提交
134 135
	test {
		systemProperty("java.awt.headless", "true")
136
		systemProperty("testGroups", project.properties.get("testGroups"))
137
		scanForTestClasses = false
138
		include(["**/*Tests.class", "**/*Test.class"])
139 140
		// Since we set scanForTestClasses to false, we need to filter out inner
		// classes with the "$" pattern; otherwise, using -Dtest.single=MyTests to
141
		// run MyTests by itself will fail if MyTests contains any inner classes.
142
		exclude(["**/Abstract*.class", '**/*$*'])
C
Chris Beams 已提交
143
	}
C
Chris Beams 已提交
144

145
	repositories {
B
Brian Clozel 已提交
146
		maven { url "https://repo.spring.io/libs-release" }
147 148
		maven { url 'https://oss.jfrog.org/libs-snapshot' }  // RxNetty 0.5.x snapshots
		maven { url 'http://repo.spring.io/snapshot' }       // Reactor snapshots
149
	}
C
Chris Beams 已提交
150

151
	dependencies {
152 153 154
		testCompile("junit:junit:${junitVersion}") {
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
155
		testCompile("org.mockito:mockito-core:1.10.19") {
156 157
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
158
		testCompile("org.hamcrest:hamcrest-all:${hamcrestVersion}")
159 160
		testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}")
		testRuntime("org.apache.logging.log4j:log4j-jcl:${log4jVersion}")
161

S
Stephane Nicoll 已提交
162
		sniffer("org.codehaus.mojo:animal-sniffer-ant-tasks:${snifferVersion}")
163
		javaApiSignature("org.codehaus.mojo.signature:java18:1.0@signature")
S
Stephane Nicoll 已提交
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
	}

	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
183

S
Stephane Nicoll 已提交
184 185 186 187 188 189 190 191 192 193 194
		doLast {
			ant.taskdef(
				name: 'animalSniffer',
				classname: 'org.codehaus.mojo.animal_sniffer.ant.CheckSignatureTask',
				classpath: configurations.sniffer.asPath
			)

			ant.animalSniffer(
					signature: "$buildDir/javaApiSignature/javaApi.signature",
					classpath: sourceSets.main.compileClasspath.asPath) {
				path(path: sourceSets.main.output.classesDir)
195 196 197
				annotation(className: "org.springframework.lang.UsesJava7")
				annotation(className: "org.springframework.lang.UsesJava8")
				annotation(className: "org.springframework.lang.UsesSunHttpServer")
S
Stephane Nicoll 已提交
198 199
			}
		}
200
	}
C
Chris Beams 已提交
201 202

	ext.javadocLinks = [
203
		"http://docs.oracle.com/javase/8/docs/api/",
204
		"http://docs.oracle.com/javaee/7/api/",
205
		"http://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/",  // CommonJ
J
Juergen Hoeller 已提交
206 207
		"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 已提交
208 209
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
210
		"http://tiles.apache.org/tiles-request/apidocs/",
J
Juergen Hoeller 已提交
211
		"http://tiles.apache.org/framework/apidocs/",
C
Chris Beams 已提交
212
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
B
Brian Clozel 已提交
213 214
		"http://ehcache.org/apidocs/${ehcacheVersion}",
		"http://ehcache.org/apidocs/${ehcache3Version}",
215
		"http://quartz-scheduler.org/api/2.2.1/",
B
Brian Clozel 已提交
216 217 218
		"http://fasterxml.github.io/jackson-core/javadoc/2.7/",
		"http://fasterxml.github.io/jackson-databind/javadoc/2.7/",
		"http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.7/",
219
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/"
C
Chris Beams 已提交
220
	] as String[]
221 222
}

223
configure(subprojects - project(":spring-build-src")) { subproject ->
224
	apply plugin: "merge"
225 226
	apply from: "${gradleScriptDir}/publish-maven.gradle"

S
Stephane Nicoll 已提交
227 228 229 230 231
	configurations {
		jacoco
	}

	dependencies {
232
		jacoco("org.jacoco:org.jacoco.agent:0.7.5.201505241946:runtime")
S
Stephane Nicoll 已提交
233 234 235
	}

	gradle.taskGraph.whenReady {taskGraph ->
236
		if (taskGraph.hasTask(':sonarqube')) {
S
Stephane Nicoll 已提交
237 238 239 240
			test.jvmArgs "-javaagent:${configurations.jacoco.asPath}=destfile=${buildDir}/jacoco.exec,includes=org.springframework.*"
		}
	}

241
	jar {
P
Phillip Webb 已提交
242 243 244 245
		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
246 247 248 249 250

		from("${rootProject.projectDir}/src/dist") {
			include "license.txt"
			include "notice.txt"
			into "META-INF"
P
Phillip Webb 已提交
251
			expand(copyright: new Date().format("yyyy"), version: project.version)
252 253 254 255
		}
	}

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

258 259 260
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = project.name
C
Chris Beams 已提交
261
		options.links(project.ext.javadocLinks)
262
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
263 264 265 266 267

		// 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
268 269
	}

270 271
	task sourcesJar(type: Jar, dependsOn: classes) {
		classifier = 'sources'
272
		from sourceSets.main.allSource
273
		// don't include or exclude anything explicitly by default. See SPR-12085.
274 275 276
	}

	task javadocJar(type: Jar) {
P
Phillip Webb 已提交
277
		classifier = "javadoc"
278 279 280 281 282 283 284
		from javadoc
	}

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
285 286
}

287 288
project("spring-build-src") {
	description = "Exposes gradle buildSrc for IDE support"
289
	apply plugin: "groovy"
290 291 292

	dependencies {
		compile gradleApi()
R
Rob Winch 已提交
293
		compile localGroovy()
294 295 296 297 298
	}

	configurations.archives.artifacts.clear()
}

P
Phillip Webb 已提交
299 300
project("spring-core") {
	description = "Spring Core"
301

302 303
	// 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
304
	// further transformed by the JarJar task to depend on org.springframework.asm; this
305
	// avoids including two different copies of asm unnecessarily.
J
Juergen Hoeller 已提交
306
	def cglibVersion = "3.2.4"
307
	def objenesisVersion = "2.4"
308 309 310 311

	configurations {
		jarjar
		cglib
312
		objenesis
313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
	}

	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)
					}
					// repackage net.sf.cglib => org.springframework.cglib
P
Phillip Webb 已提交
328 329
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
					// as mentioned above, transform cglib"s internal asm dependencies from
330 331
					// 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 已提交
332
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
333 334 335 336 337
				}
			}
		}
	}

338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356
	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)
					}
					// repackage org.objenesis => org.springframework.objenesis
					rule(pattern: "org.objenesis.**", result: "org.springframework.objenesis.@1")
				}
			}
		}
	}

357
	dependencies {
358
		cglib("cglib:cglib:${cglibVersion}@jar")
359
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
360
		jarjar("com.googlecode.jarjar:jarjar:1.3")
361

P
Phillip Webb 已提交
362
		compile(files(cglibRepackJar))
363
		compile(files(objenesisRepackJar))
364
		compile("commons-logging:commons-logging:1.2")
365
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
366
		optional("net.sf.jopt-simple:jopt-simple:5.0.2")
367 368 369 370
		optional("org.reactivestreams:reactive-streams:1.0.0")
		optional("io.projectreactor:reactor-core:${reactorCoreVersion}")
		optional "io.reactivex:rxjava:${rxJavaVersion}"
		optional("io.netty:netty-buffer:${nettyVersion}")
371
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
372
		testCompile("xmlunit:xmlunit:${xmlunitVersion}")
373
		testCompile("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") {
P
Phillip Webb 已提交
374 375
			exclude group: "stax", module: "stax-api"
		}
376 377 378
	}

	jar {
379
		// inline repackaged cglib classes directly into the spring-core jar
380 381
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
382
			include "org/springframework/cglib/**"
383
		}
384 385 386 387 388

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
389
	}
C
Chris Beams 已提交
390 391
}

P
Phillip Webb 已提交
392 393
project("spring-beans") {
	description = "Spring Beans"
394

395
	dependencies {
396 397
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
398
		optional("javax.inject:javax.inject:1")
399
		optional("javax.el:javax.el-api:2.2.5")
400
		optional("org.yaml:snakeyaml:${snakeyamlVersion}")
401
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
J
Juergen Hoeller 已提交
402
	}
C
Chris Beams 已提交
403 404
}

405 406
project("spring-beans-groovy") {
	description "Groovy Bean Definitions"
J
Juergen Hoeller 已提交
407
	merge.into = project(":spring-beans")
408
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
409 410 411

	dependencies {
		compile(project(":spring-core"))
412
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
J
Juergen Hoeller 已提交
413 414 415 416 417 418 419
	}

	// this module's Java and Groovy sources need to be compiled together
	compileJava.enabled=false
	sourceSets {
		main {
			groovy {
420
				srcDir "src/main/java"
J
Juergen Hoeller 已提交
421 422 423
			}
		}
	}
424 425

	compileGroovy {
426 427
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
428
	}
J
Juergen Hoeller 已提交
429 430
}

P
Phillip Webb 已提交
431 432
project("spring-aop") {
	description = "Spring AOP"
433

434
	dependencies {
435
		compile(project(":spring-beans"))
436 437
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
438
		compile(files(project(":spring-core").objenesisRepackJar))
439
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
440
		optional("org.apache.commons:commons-pool2:2.4.2")
441
		optional("com.jamonapi:jamon:2.81")
442
	}
C
Chris Beams 已提交
443 444
}

P
Phillip Webb 已提交
445 446
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
447

448
	dependencies {
449
		compile(project(":spring-core"))
450
	}
C
Chris Beams 已提交
451 452
}

P
Phillip Webb 已提交
453 454
project("spring-instrument") {
	description = "Spring Instrument"
455

456
	jar {
P
Phillip Webb 已提交
457 458
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
459 460
		manifest.attributes["Agent-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
461 462 463
		manifest.attributes["Can-Redefine-Classes"] = "true"
		manifest.attributes["Can-Retransform-Classes"] = "true"
		manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
464
	}
C
Chris Beams 已提交
465 466
}

P
Phillip Webb 已提交
467 468
project("spring-context") {
	description = "Spring Context"
469
	apply plugin: "groovy"
470

471
	dependencies {
472 473 474 475 476
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
477
		optional(project(":spring-instrument"))
478
		optional("javax.inject:javax.inject:1")
479
		optional("javax.ejb:ejb-api:${ejbVersion}")
480
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
481
		optional("javax.money:money-api:1.0")
J
Juergen Hoeller 已提交
482 483
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
		optional("javax.validation:validation-api:${beanvalVersion}")
484
		optional("org.hibernate:hibernate-validator:${hibval5Version}")
485 486
		optional("joda-time:joda-time:${jodaVersion}")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
487
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
488
		optional("org.beanshell:bsh:2.0b4")
489
		testCompile("javax.inject:javax.inject-tck:1")
490 491
		testCompile("javax.el:javax.el-api:2.2.5")
		testCompile("org.glassfish.web:javax.el:2.2.6")
492
		testCompile("org.javamoney:moneta:1.1")
493
		testCompile("org.apache.commons:commons-pool2:2.4.2")
494
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
495
	}
496 497 498 499 500 501 502 503 504
}

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
505
		optional(project(":spring-oxm"))
506 507 508
		optional("io.projectreactor:reactor-core:${reactorVersion}") {
			force = true // enforce 2.0.x
		}
S
Stephane Maldini 已提交
509
		optional("io.projectreactor:reactor-net:${reactorVersion}") {
510 511
			exclude group: "io.netty", module: "netty-all"
		}
512
		optional("io.netty:netty-all:${nettyVersion}")
B
Brian Clozel 已提交
513
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
514 515
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
516
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
517
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
518
		testCompile("javax.inject:javax.inject-tck:1")
519
		testCompile("javax.servlet:javax.servlet-api:3.1.0")
J
Juergen Hoeller 已提交
520
		testCompile("javax.validation:validation-api:${beanvalVersion}")
521
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
522 523 524 525 526
		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 已提交
527
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
528
			exclude group: "javax.servlet", module: "javax.servlet-api"
529
		}
530 531
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}")
532
		testCompile("io.netty:netty-all:${nettyVersion}")
533
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
534
		testCompile("xmlunit:xmlunit:${xmlunitVersion}")
535
	}
C
Chris Beams 已提交
536 537
}

P
Phillip Webb 已提交
538 539
project("spring-tx") {
	description = "Spring Transaction"
540

541
	dependencies {
542 543
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
544
		optional(project(":spring-aop"))
545
		optional(project(":spring-context"))  // for JCA, @EnableTransactionManagement
546
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
J
Juergen Hoeller 已提交
547
		optional("javax.resource:javax.resource-api:${jcaVersion}")
548
		optional("javax.ejb:ejb-api:${ejbVersion}")
549
		optional("com.ibm.websphere:uow:6.0.2.17")
550
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
551
		testCompile("org.eclipse.persistence:javax.persistence:${jpaVersion}")
552
		testCompile("org.codehaus.groovy:groovy-all:${groovyVersion}")
553
	}
C
Chris Beams 已提交
554 555
}

P
Phillip Webb 已提交
556 557 558
project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"
559

P
Phillip Webb 已提交
560
	compileTestJava {
561 562
		// necessary to avoid java.lang.VerifyError on jibx compilation
		// see http://jira.codehaus.org/browse/JIBX-465
563 564
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
565 566
	}

567
	dependencies {
568 569
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
570
		optional("org.codehaus.castor:castor-xml:1.4.1")  {
571
			exclude group: 'stax', module: 'stax-api'
572
			exclude group: "org.springframework", module: "spring-context"
573 574 575 576 577
		}
		optional("com.thoughtworks.xstream:xstream:${xstreamVersion}") {
			exclude group: 'xpp3', module: 'xpp3_min'
			exclude group: 'xmlpull', module: 'xmlpull'
		}
578
		optional("org.jibx:jibx-run:1.2.6")
579
		testCompile(project(":spring-context"))
580
		testCompile("xmlunit:xmlunit:${xmlunitVersion}")
581 582
		testCompile("xpp3:xpp3:1.1.4c")
		testCompile("org.codehaus.jettison:jettison:1.3.7") {
583 584
			exclude group: 'stax', module: 'stax-api'
		}
585 586 587 588
		if (compileTestJava.enabled) {
			testCompile(files(genCastor.classesDir).builtBy(genCastor))
			testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
		}
589
	}
C
Chris Beams 已提交
590 591
}

P
Phillip Webb 已提交
592 593
project("spring-jms") {
	description = "Spring JMS"
594

595
	dependencies {
596 597 598 599
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
600
		compile(project(":spring-messaging"))
601
		compile(project(":spring-tx"))
J
Juergen Hoeller 已提交
602
		provided("javax.jms:javax.jms-api:2.0.1")
603
		optional(project(":spring-oxm"))
604
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
J
Juergen Hoeller 已提交
605
		optional("javax.resource:javax.resource-api:${jcaVersion}")
606
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
607
	}
C
Chris Beams 已提交
608 609
}

P
Phillip Webb 已提交
610 611
project("spring-jdbc") {
	description = "Spring JDBC"
612

613
	dependencies {
614
		compile(project(":spring-beans"))
615
		compile(project(":spring-core"))
616
		compile(project(":spring-tx"))
617
		optional(project(":spring-context"))  // for JndiDataSourceLookup
618
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
619
		optional("com.mchange:c3p0:0.9.5.2")
P
Phillip Webb 已提交
620
		optional("org.hsqldb:hsqldb:${hsqldbVersion}")
621
		optional("com.h2database:h2:1.4.192")
622 623
		optional("org.apache.derby:derby:10.12.1.1")
		optional("org.apache.derby:derbyclient:10.12.1.1")
624
	}
C
Chris Beams 已提交
625 626
}

P
Phillip Webb 已提交
627 628
project("spring-context-support") {
	description = "Spring Context Support"
629

630
	dependencies {
631 632 633
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
634 635
		optional(project(":spring-jdbc"))  // for Quartz support
		optional(project(":spring-tx"))  // for Quartz support
636
		optional("javax.mail:javax.mail-api:${javamailVersion}")
S
Stephane Nicoll 已提交
637
		optional("javax.cache:cache-api:1.0.0")
B
Ben Manes 已提交
638
		optional("com.github.ben-manes.caffeine:caffeine:${caffeineVersion}")
639
		optional("net.sf.ehcache:ehcache:${ehcacheVersion}")
640
		optional("org.quartz-scheduler:quartz:2.2.3")
641
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
642
		optional("org.freemarker:freemarker:${freemarkerVersion}")
643
		optional("com.lowagie:itext:2.1.7")
644
		testCompile(project(":spring-context"))
645
		testCompile("org.apache.poi:poi:${poiVersion}")
P
Phillip Webb 已提交
646
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
647
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
648
		testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
649
		testRuntime("org.ehcache:jcache:${ehcachejcacheVersion}")
650
	}
C
Chris Beams 已提交
651 652
}

P
Phillip Webb 已提交
653 654
project("spring-web") {
	description = "Spring Web"
655
	apply plugin: "groovy"
656

657 658 659 660 661 662 663 664 665 666 667 668 669 670 671
	// Re-generate Protobuf classes from *.proto files and move them in test sources
	if (project.hasProperty('genProtobuf')) {
		apply plugin: 'protobuf'

		task updateGenProtobuf(type:Copy, dependsOn: ":spring-web:generateTestProto") {
			from "${project.buildDir}/generated-sources/test/"
			into "${projectDir}/src/test/java"
			doLast {
				project.delete "${project.buildDir}/generated-sources/test"
			}
		}

		tasks.getByPath("compileTestJava").dependsOn "updateGenProtobuf"
	}

672
	dependencies {
673 674
		compile(project(":spring-aop"))  // for JaxWsPortProxyFactoryBean
		compile(project(":spring-beans"))  // for MultipartFilter
675
		compile(project(":spring-context"))
676
		compile(project(":spring-core"))
677
		provided "javax.servlet:javax.servlet-api:3.1.0"
678
		optional(project(":spring-oxm"))  // for MarshallingHttpMessageConverter
679
		optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1")
680
		optional("javax.el:javax.el-api:2.2.5")
681
		optional("javax.faces:javax.faces-api:2.2")
J
Juergen Hoeller 已提交
682
		optional("javax.validation:validation-api:${beanvalVersion}")
683
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
684
		optional("com.caucho:hessian:4.0.38")
685
		optional("commons-fileupload:commons-fileupload:${fileuploadVersion}")
686 687 688 689 690 691 692 693 694
		optional("org.reactivestreams:reactive-streams:1.0.0")
		optional("io.projectreactor:reactor-core:${reactorCoreVersion}")
		optional("io.projectreactor:reactor-netty:${reactorNettyVersion}")
		optional("io.reactivex:rxnetty-http:0.5.2-SNAPSHOT") {
			exclude group: 'io.reactivex', module: 'rxjava'
		}
		optional("io.reactivex:rxjava:${rxJavaVersion}")
		optional("io.undertow:undertow-core:1.3.20.Final")
		optional("io.netty:netty-buffer:${nettyVersion}") // Temporarily for JsonObjectDecoder
695 696 697
	  	optional("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") { // woodstox before aalto
			exclude group: "stax", module: "stax-api"
		}
698
		optional("com.fasterxml:aalto-xml:1.0.0")
699 700
		optional("org.apache.httpcomponents:httpclient:${httpclientVersion}")
		optional("org.apache.httpcomponents:httpasyncclient:${httpasyncVersion}")
701
		optional("io.netty:netty-all:${nettyVersion}")
702
		optional("com.squareup.okhttp:okhttp:${okhttpVersion}")
703
		optional("com.squareup.okhttp3:okhttp:${okhttp3Version}")
704
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
705
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
R
Roy Clarkson 已提交
706
		optional("com.google.code.gson:gson:${gsonVersion}")
707
		optional("com.rometools:rome:${romeVersion}")
B
Brian Clozel 已提交
708
		optional("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
709
			exclude group: "javax.servlet", module: "javax.servlet-api"
710
		}
B
Brian Clozel 已提交
711
		optional("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
712
			exclude group: "javax.servlet", module: "javax.servlet-api"
713
		}
714 715
		optional("com.google.protobuf:protobuf-java:2.6.1")
		optional("com.googlecode.protobuf-java-format:protobuf-java-format:1.4")
716
		optional("javax.mail:javax.mail-api:${javamailVersion}")
717
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
718
		testCompile("xmlunit:xmlunit:${xmlunitVersion}")
719
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
720 721 722
		testCompile("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {
			exclude group: "org.apache.taglibs", module: "taglibs-standard-spec"
		}
723
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-joda:${jackson2Version}")
724
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2Version}")
725
		testCompile("com.fasterxml.jackson.module:jackson-module-kotlin:${jackson2Version}")
726
		testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
727 728 729 730 731
		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}")
		testCompile("com.squareup.okhttp3:mockwebserver:3.0.1")
732

733
	}
C
Chris Beams 已提交
734 735
}

P
Phillip Webb 已提交
736 737
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
738

739
	dependencies {
740 741 742 743 744 745 746
		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 已提交
747
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
748 749
		optional("org.eclipse.persistence:org.eclipse.persistence.core:${eclipselinkVersion}")
		optional("org.eclipse.persistence:org.eclipse.persistence.jpa:${eclipselinkVersion}") {
750 751
			exclude group: 'org.eclipse.persistence', module: 'javax.persistence'
		}
752
		optional("org.hibernate:hibernate-core:${hibernate5Version}")
753
		optional("javax.servlet:javax.servlet-api:3.0.1")
S
Sam Brannen 已提交
754
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
P
Phillip Webb 已提交
755
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
756
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
757
	}
C
Chris Beams 已提交
758 759
}

P
Phillip Webb 已提交
760 761
project("spring-webmvc") {
	description = "Spring Web MVC"
762

763
	dependencies {
764
		compile(project(":spring-aop"))
765 766
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
767
		compile(project(":spring-core"))
768
		compile(files(project(":spring-core").objenesisRepackJar))
769 770
		compile(project(":spring-expression"))
		compile(project(":spring-web"))
771
		provided("javax.servlet:javax.servlet-api:3.1.0")
772
		optional(project(":spring-context-support"))  // for FreeMarker support
773
		optional(project(":spring-oxm"))  // for MarshallingView
774 775
		optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1")
		optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1")
776 777
		optional("org.apache.poi:poi:${poiVersion}")
		optional("org.apache.poi:poi-ooxml:${poiVersion}")
778
		optional("org.freemarker:freemarker:${freemarkerVersion}")
779
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
780 781
		optional("com.lowagie:itext:2.1.7")
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
782
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
783
		optional("com.rometools:rome:${romeVersion}")
784 785 786
		optional("javax.el:javax.el-api:2.2.5")
		optional("org.apache.tiles:tiles-api:${tiles3Version}")
		optional("org.apache.tiles:tiles-core:${tiles3Version}") {
787 788
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
789
		optional("org.apache.tiles:tiles-servlet:${tiles3Version}") {
790 791
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
792
		optional("org.apache.tiles:tiles-jsp:${tiles3Version}") {
793 794
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
795
		optional("org.apache.tiles:tiles-el:${tiles3Version}") {
796 797
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
798
		optional("org.apache.tiles:tiles-extras:${tiles3Version}") {
799 800 801
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
			exclude group: "org.springframework", module: "spring-web"
		}
802
		optional('org.webjars:webjars-locator:0.32')
803
		testCompile("xmlunit:xmlunit:${xmlunitVersion}")
804
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
805
			exclude group: "xml-apis", module: "xml-apis"
806 807
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
808 809 810
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
811
		}
B
Brian Clozel 已提交
812
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
813
			exclude group: "javax.servlet", module: "javax.servlet"
814
		}
B
Brian Clozel 已提交
815
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
816
			exclude group: "javax.servlet", module: "javax.servlet"
817
		}
J
Juergen Hoeller 已提交
818
		testCompile("javax.validation:validation-api:${beanvalVersion}")
819
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
820 821
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}")
		testCompile("commons-fileupload:commons-fileupload:${fileuploadVersion}")
822
		testCompile("commons-io:commons-io:1.3")
823
		testCompile("joda-time:joda-time:${jodaVersion}")
824
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
825
		testCompile("org.mozilla:rhino:1.7.7.1")
826 827 828
		testRuntime("org.jruby:jruby:9.1.2.0")
		testRuntime("org.python:jython-standalone:2.5.3")
		testRuntime("org.webjars:underscorejs:1.8.3")
829
	}
C
Chris Beams 已提交
830 831
}

832 833 834 835 836 837 838 839 840 841 842 843 844
project("spring-web-reactive") {
	description = "Spring Web Reactive"

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-web"))
		compile "org.reactivestreams:reactive-streams:1.0.0"
		compile "io.projectreactor:reactor-core:${reactorCoreVersion}"
		optional(project(":spring-context-support"))  // for FreeMarker support
		provided "javax.servlet:javax.servlet-api:3.1.0"
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		optional("org.freemarker:freemarker:${freemarkerVersion}")
		optional "org.apache.httpcomponents:httpclient:4.5.1" // Needed to run Javadoc without error
845 846 847 848 849 850 851 852 853 854 855
		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}")
		testCompile("io.projectreactor:reactor-netty:${reactorNettyVersion}")
		testCompile("io.reactivex:rxnetty-http:0.5.2-SNAPSHOT") {
			exclude group: 'io.reactivex', module: 'rxjava'
		}
		testCompile("io.undertow:undertow-core:1.3.20.Final")
		testCompile("io.reactivex:rxjava:${rxJavaVersion}")
		testCompile("com.fasterxml:aalto-xml:1.0.0")
856 857 858 859 860 861
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("javax.validation:validation-api:${beanvalVersion}")
		testCompile("xmlunit:xmlunit:1.6")
	}
}

862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896
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"))
		optional("javax.servlet:javax.servlet-api:3.1.0")
		optional("javax.websocket:javax.websocket-api:1.0")
		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"
		}
897
		optional("org.jboss.xnio:xnio-api:3.3.7.Final")
898 899 900
		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}")
901 902 903
		testCompile("io.projectreactor:reactor-core:${reactorVersion}") {
			force = true // enforce 2.0.x
		}
904 905 906
		testCompile("io.projectreactor:reactor-net:${reactorVersion}")
		testCompile("io.netty:netty-all:${nettyVersion}")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
907 908
		testRuntime("org.jboss.xnio:xnio-nio:3.3.7.Final")
		testRuntime("org.jboss.logging:jboss-logging:3.3.0.Final")
909 910 911
	}
}

P
Phillip Webb 已提交
912 913
project("spring-test") {
	description = "Spring TestContext Framework"
914

915
	dependencies {
916
		compile(project(":spring-core"))
917 918 919 920 921 922 923
		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"))
924
		optional(project(":spring-websocket"))
925
		optional("junit:junit:${junitVersion}")
926
		optional("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
927
		optional("org.testng:testng:${testngVersion}")
928
		optional("javax.inject:javax.inject:1")
929
		optional("javax.servlet:javax.servlet-api:3.0.1")
930 931 932 933 934
		optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1")
		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"
		}
935
		optional("javax.el:javax.el-api:2.2.5")
936
		optional("javax.websocket:javax.websocket-api:1.0")
937
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
S
Sam Brannen 已提交
938
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
939
		optional("org.hamcrest:hamcrest-core:${hamcrestVersion}")
940
		optional("xmlunit:xmlunit:${xmlunitVersion}")
941 942
		optional("net.sourceforge.htmlunit:htmlunit:2.22")
		optional("org.seleniumhq.selenium:htmlunit-driver:2.21")
943 944 945
		optional("org.seleniumhq.selenium:selenium-java:2.53.1") {
			exclude group: "io.netty", module: "netty"
		}
946 947
		optional("org.skyscreamer:jsonassert:1.3.0")
		optional("com.jayway.jsonpath:json-path:2.2.0")
948 949
		testCompile(project(":spring-context-support"))
		testCompile(project(":spring-oxm"))
950
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
951
		testCompile("javax.ejb:ejb-api:${ejbVersion}")
952
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
953
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
954 955
		// Enable use of the JUnitPlatform Runner
		testCompile("org.junit.platform:junit-platform-runner:${junitPlatformVersion}")
956
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
957
		testCompile("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
958
		testCompile("com.rometools:rome:${romeVersion}")
959 960
		testCompile("org.apache.tiles:tiles-api:${tiles3Version}")
		testCompile("org.apache.tiles:tiles-core:${tiles3Version}") {
961 962
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
963
		testCompile("org.apache.tiles:tiles-servlet:${tiles3Version}") {
964 965
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
966
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
S
Sam Brannen 已提交
967
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
968
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}")
969
		testCompile("javax.cache:cache-api:1.0.0")
970
		testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")
971 972
		// Java Util Logging for JUnit 5.
		testRuntime("org.apache.logging.log4j:log4j-jul:${log4jVersion}")
973
		testRuntime("org.ehcache:ehcache:${ehcache3Version}")
J
Juergen Hoeller 已提交
974
		testRuntime("org.terracotta:management-model:2.0.0")
975
	}
976 977

	task testNG(type: Test) {
978
		description = 'Runs TestNG tests.'
979
		useTestNG()
980
		scanForTestClasses = false
981 982
		include(["**/testng/**/*Tests.class", "**/testng/**/*Test.class"])
		// Show STD_OUT & STD_ERR of the test JVM(s) on the console:
983
		// testLogging.showStandardStreams = true
984
		// forkEvery 1
985 986 987
	}

	test {
988
		description = 'Runs JUnit tests.'
989 990
		dependsOn testNG
		useJUnit()
991 992 993
		scanForTestClasses = false
		include(['**/*Tests.class', '**/*Test.class', '**/SpringJUnitJupiterTestSuite.class'])
		exclude(['**/testng/**/*.*'])
994 995
		// Java Util Logging for JUnit 5.
		// systemProperty('java.util.logging.manager', 'org.apache.logging.log4j.jul.LogManager')
996
	}
997 998

	task aggregateTestReports(type: TestReport) {
999
		description = 'Aggregates JUnit and TestNG test reports.'
1000 1001 1002 1003 1004
		destinationDir = test.reports.html.destination
		reportOn test, testNG
	}

	check.dependsOn aggregateTestReports
C
Chris Beams 已提交
1005 1006
}

P
Phillip Webb 已提交
1007 1008 1009
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
1010

1011
	dependencies {
1012
		aspects(project(":spring-orm"))
1013 1014 1015
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
1016
		provided("org.eclipse.persistence:javax.persistence:${jpaVersion}")
1017 1018 1019 1020 1021 1022
		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
1023
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")  // for @javax.transaction.Transactional support
S
Stephane Nicoll 已提交
1024
		optional("javax.cache:cache-api:1.0.0")
1025
		testCompile(project(":spring-core"))  // for CodeStyleAspect
1026
		testCompile(project(":spring-test"))
1027
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
1028
	}
1029

1030
	eclipse.project {
P
Phillip Webb 已提交
1031
		natures += "org.eclipse.ajdt.ui.ajnature"
1032
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
1033
	}
C
Chris Beams 已提交
1034 1035
}

1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070
project("spring-framework-bom") {
	description = "Spring Framework (Bill of Materials)"

	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)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

1071 1072
sonarqube {
	properties {
S
Stephane Nicoll 已提交
1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084
		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"
	}
}

1085
configure(rootProject) {
P
Phillip Webb 已提交
1086
	description = "Spring Framework"
1087

B
Brian Clozel 已提交
1088
	apply plugin: "org.asciidoctor.convert"
1089
	apply plugin: "docbook-reference"
1090
	apply plugin: "groovy"
R
Rob Winch 已提交
1091

1092
	// apply plugin: "detect-split-packages"
1093 1094
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
1095
	asciidoctor {
B
Brian Clozel 已提交
1096 1097
		sourceDir project.file('src/asciidoc')
		separateOutputDirs = false
1098
		backends = ['docbook']
B
Brian Clozel 已提交
1099
		options doctype: 'book', eruby: 'erubis'
J
Juergen Hoeller 已提交
1100
		attributes 'spring-version': project.version, 'revnumber': project.version, 'docinfo': ""
1101 1102
	}

1103 1104 1105
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
1106
		epubFilename = "spring-framework-reference.epub"
1107 1108 1109 1110 1111 1112 1113
		expandPlaceholders = ""
	}

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

1114 1115 1116 1117 1118
	// 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")
	// }
1119

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

1123
	dependencies {  // for integration tests
1124
		testCompile(project(":spring-aop"))
1125
		testCompile(project(":spring-beans"))
1126
		testCompile(project(":spring-context"))
1127 1128
		testCompile(project(":spring-core"))
		testCompile(project(":spring-expression"))
1129
		testCompile(project(":spring-jdbc"))
1130
		testCompile(project(":spring-orm"))
1131
		testCompile(project(":spring-test"))
1132
		testCompile(project(":spring-tx"))
1133
		testCompile(project(":spring-web"))
1134
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
1135
		testCompile("javax.inject:javax.inject:1")
J
Juergen Hoeller 已提交
1136
		testCompile("javax.resource:javax.resource-api:${jcaVersion}")
1137
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
1138
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
P
Phillip Webb 已提交
1139
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
1140 1141 1142
	}

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

1147 1148 1149 1150 1151
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
1152 1153 1154
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
1155
		options.overview = "src/api/overview.html"
1156
		options.stylesheetFile = file("src/api/stylesheet.css")
1157
		options.splitIndex = true
C
Chris Beams 已提交
1158
		options.links(project.ext.javadocLinks)
1159
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
1160

1161 1162 1163
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
1164

P
Phillip Webb 已提交
1165
		maxMemory = "1024m"
C
Chris Beams 已提交
1166
		destinationDir = new File(buildDir, "api")
1167 1168 1169

		doFirst {
			classpath = files(
1170 1171
                // ensure Servlet 3.x has precedence on the javadoc classpath
                project(":spring-webmvc").sourceSets.main.compileClasspath.files.find { it =~ "servlet-api" },
1172 1173 1174 1175 1176
				// ensure the javadoc process can resolve types compiled from .aj sources
				project(":spring-aspects").sourceSets.main.output
			)
			classpath += files(subprojects.collect { it.sourceSets.main.compileClasspath })
		}
1177 1178
	}

1179
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1180 1181 1182
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1183 1184 1185
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1186 1187
		from("src/dist") {
			include "changelog.txt"
1188 1189 1190
		}

		from (api) {
1191
			into "javadoc-api"
1192 1193
		}

1194 1195
		from (reference) {
			into "spring-framework-reference"
1196 1197 1198 1199
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1200 1201 1202
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1203 1204
		description = "Builds -${classifier} archive containing all " +
			"XSDs for deployment at http://springframework.org/schema."
S
Stephane Nicoll 已提交
1205
		duplicatesStrategy 'exclude'
1206
		moduleProjects.each { subproject ->
1207 1208 1209
			def Properties schemas = new Properties();

			subproject.sourceSets.main.resources.find {
P
Phillip Webb 已提交
1210
				it.path.endsWith("META-INF/spring.schemas")
1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227
			}?.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 已提交
1228 1229 1230
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1231
		description = "Builds -${classifier} archive, containing all jars and docs, " +
J
Juergen Hoeller 已提交
1232
			"suitable for community download page."
1233 1234 1235

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

P
Phillip Webb 已提交
1236 1237 1238 1239
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1240
			into "${baseDir}"
P
Phillip Webb 已提交
1241
			expand(copyright: new Date().format("yyyy"), version: project.version)
1242 1243 1244 1245 1246 1247 1248 1249 1250 1251
		}

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

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

1252
		moduleProjects.each { subproject ->
1253 1254
			into ("${baseDir}/libs") {
				from subproject.jar
P
Phillip Webb 已提交
1255
				if (subproject.tasks.findByPath("sourcesJar")) {
1256 1257
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1258
				if (subproject.tasks.findByPath("javadocJar")) {
1259 1260 1261 1262 1263 1264
					from subproject.javadocJar
				}
			}
		}
	}

1265
	// Create a distribution that contains all dependencies (required and optional).
1266 1267
	// Not published by default; only for use when building from source.
	task depsZip(type: Zip, dependsOn: distZip) { zipTask ->
P
Phillip Webb 已提交
1268 1269 1270
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1271 1272 1273 1274 1275 1276 1277 1278 1279 1280
		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 ->
1281 1282
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303
						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 已提交
1304
		description = "Generates gradlew[.bat] scripts"
S
Sam Brannen 已提交
1305
		gradleVersion = "2.14"
1306 1307

		doLast() {
1308
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1309
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1310
			File wrapperFile = file("gradlew")
1311 1312
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1313
			File wrapperBatFile = file("gradlew.bat")
1314 1315 1316 1317
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1318

1319
}
1320

S
Stephane Nicoll 已提交
1321
configure([project(':spring-build-src'), project(':spring-framework-bom')]) {
1322
	sonarqube {
S
Stephane Nicoll 已提交
1323 1324 1325 1326 1327
		skipProject = true
	}
}

configure(project(':spring-core')) {
1328 1329
	sonarqube {
		properties {
S
Stephane Nicoll 已提交
1330 1331 1332 1333 1334 1335
			property "sonar.exclusions",
					"src/main/java/org/springframework/cglib/**/*,src/main/java/org/springframework/asm/**/*"
		}
	}
}

1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346
/*
 * 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-")) {
1347
			return version.replace('BUILD', qualifier)
1348 1349
		}
	}
1350
	return version
1351
}