build.gradle 50.5 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
	ext.activationApiVersion   = "1.1.1"
	ext.aspectjVersion         = "1.9.0.BETA-4"
	ext.beanvalVersion         = "1.1.0.Final"
	ext.caffeineVersion        = "2.3.1"
	ext.eclipselinkVersion     = "2.6.3"
	ext.ehcacheVersion         = "2.10.2"
	ext.ehcachejcacheVersion   = "1.0.1"
	ext.ehcache3Version        = "3.1.1"
	ext.elApiVersion           = "3.0.1-b04"
	ext.ejbApiVersion          = "3.2"
	ext.fileuploadVersion      = "1.3.2"
	ext.freemarkerVersion      = "2.3.25-incubating"
	ext.groovyVersion          = "2.4.7"
	ext.gsonVersion            = "2.7"
	ext.hamcrestVersion        = "1.3"
	ext.hibernate5Version      = "5.2.1.Final"
	ext.hibval5Version         = "5.2.4.Final"
	ext.hsqldbVersion          = "2.3.4"
	ext.httpasyncVersion       = "4.1.2"
	ext.httpclientVersion      = "4.5.2"
	ext.interceptorApiVersion  = "1.2"
J
Juergen Hoeller 已提交
55
	ext.jackson2Version        = "2.8.1"
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
	ext.javamailVersion        = "1.5.5"
	ext.jaxbVersion            = "2.2.11"
	ext.jcaVersion             = "1.7"
	ext.jettyVersion           = "9.3.10.v20160621"
	ext.jodaVersion            = "2.9.4"
	ext.jpaVersion             = "2.1.1"
	ext.jspVersion             = "2.3.2-b02"
	ext.jtaVersion             = "1.2"
	ext.junitVersion           = "4.12"
	ext.junitJupiterVersion    = '5.0.0-M1'
	ext.junitPlatformVersion   = '1.0.0-M1'
	ext.log4jVersion           = '2.6.2'
	ext.nettyVersion           = "4.1.3.Final"
	ext.okhttpVersion          = "2.7.5"
	ext.okhttp3Version         = "3.4.1"
	ext.poiVersion             = "3.14"
72
	ext.protobufVersion        = "3.0.0-beta-4"
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
	ext.reactivestreamsVersion = "1.0.0"
	ext.reactorVersion         = "2.0.8.RELEASE"
	ext.reactorCoreVersion     = '3.0.0.BUILD-SNAPSHOT'
	ext.reactorNettyVersion    = '0.5.0.BUILD-SNAPSHOT'
	ext.rxjavaVersion          = '1.1.6'
	ext.romeVersion            = "1.6.0"
	ext.servletVersion         = "3.1.0"
	ext.slf4jVersion           = "1.7.21"
	ext.snakeyamlVersion       = "1.17"
	ext.snifferVersion         = "1.15"
	ext.testngVersion          = "6.9.10"
	ext.tiles3Version          = "3.0.5"
	ext.tomcatVersion          = "8.5.4"
	ext.tyrusVersion           = "1.13"
	ext.undertowVersion        = "1.4.0.CR3"
	ext.websocketVersion       = "1.1"
	ext.woodstoxVersion        = "5.0.2"
	ext.xmlunitVersion         = "1.6"
	ext.xstreamVersion         = "1.4.9"
92

93
	ext.gradleScriptDir = "${rootProject.projectDir}/gradle"
94

95
	apply plugin: "propdeps"
P
Phillip Webb 已提交
96
	apply plugin: "java"
97
	apply plugin: "test-source-set-dependencies"
98
	apply from: "${gradleScriptDir}/ide.gradle"
C
Chris Beams 已提交
99

S
Stephane Nicoll 已提交
100 101 102 103 104
	configurations {
		sniffer
		javaApiSignature
	}

105 106 107 108 109 110 111 112 113 114 115 116
	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 已提交
117 118 119
	compileJava.options*.compilerArgs = [
		"-Xlint:serial", "-Xlint:varargs", "-Xlint:cast", "-Xlint:classfile",
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
S
Stephane Nicoll 已提交
120
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
P
Phillip Webb 已提交
121
		"-Xlint:try", "-Xlint:fallthrough", "-Xlint:rawtypes", "-Xlint:deprecation",
122
		"-Xlint:unchecked", "-Xlint:-options", "-Werror"
123
	]
C
Chris Beams 已提交
124

P
Phillip Webb 已提交
125
	compileTestJava.options*.compilerArgs = [
126
		"-Xlint:serial", "-Xlint:-varargs", "-Xlint:cast", "-Xlint:classfile",
P
Phillip Webb 已提交
127
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
S
Stephane Nicoll 已提交
128
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
P
Phillip Webb 已提交
129 130 131
		"-Xlint:try", "-Xlint:-fallthrough", "-Xlint:-rawtypes", "-Xlint:-deprecation",
		"-Xlint:-unchecked", "-Xlint:-options"]

132
	compileJava {
133 134
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
135 136 137
	}

	compileTestJava {
J
Juergen Hoeller 已提交
138 139
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
140
		options.compilerArgs += "-parameters"
J
Juergen Hoeller 已提交
141 142
	}

C
Chris Beams 已提交
143 144
	test {
		systemProperty("java.awt.headless", "true")
145
		systemProperty("testGroups", project.properties.get("testGroups"))
146
		scanForTestClasses = false
147
		include(["**/*Tests.class", "**/*Test.class"])
148 149
		// Since we set scanForTestClasses to false, we need to filter out inner
		// classes with the "$" pattern; otherwise, using -Dtest.single=MyTests to
150
		// run MyTests by itself will fail if MyTests contains any inner classes.
151
		exclude(["**/Abstract*.class", '**/*$*'])
C
Chris Beams 已提交
152
	}
C
Chris Beams 已提交
153

154
	repositories {
B
Brian Clozel 已提交
155
		maven { url "https://repo.spring.io/libs-release" }
156
		maven { url "https://repo.spring.io/milestone" }
157
		maven { url 'http://repo.spring.io/snapshot' }       // Reactor snapshots
158
		maven { url 'https://oss.jfrog.org/libs-snapshot' }  // RxNetty 0.5.x snapshots
159
	}
C
Chris Beams 已提交
160

161
	dependencies {
162 163 164
		testCompile("junit:junit:${junitVersion}") {
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
165
		testCompile("org.mockito:mockito-core:1.10.19") {
166 167
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
168
		testCompile("org.hamcrest:hamcrest-all:${hamcrestVersion}")
169 170
		testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}")
		testRuntime("org.apache.logging.log4j:log4j-jcl:${log4jVersion}")
171

S
Stephane Nicoll 已提交
172
		sniffer("org.codehaus.mojo:animal-sniffer-ant-tasks:${snifferVersion}")
173
		javaApiSignature("org.codehaus.mojo.signature:java18:1.0@signature")
S
Stephane Nicoll 已提交
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
	}

	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
193

S
Stephane Nicoll 已提交
194 195 196 197 198 199 200 201 202 203 204
		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)
205 206 207
				annotation(className: "org.springframework.lang.UsesJava7")
				annotation(className: "org.springframework.lang.UsesJava8")
				annotation(className: "org.springframework.lang.UsesSunHttpServer")
S
Stephane Nicoll 已提交
208 209
			}
		}
210
	}
C
Chris Beams 已提交
211 212

	ext.javadocLinks = [
213
		"http://docs.oracle.com/javase/8/docs/api/",
214
		"http://docs.oracle.com/javaee/7/api/",
215
		"http://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/",  // CommonJ
J
Juergen Hoeller 已提交
216 217
		"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 已提交
218 219
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
220
		"http://tiles.apache.org/tiles-request/apidocs/",
J
Juergen Hoeller 已提交
221
		"http://tiles.apache.org/framework/apidocs/",
C
Chris Beams 已提交
222
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
B
Brian Clozel 已提交
223 224
		"http://ehcache.org/apidocs/${ehcacheVersion}",
		"http://ehcache.org/apidocs/${ehcache3Version}",
225
		"http://quartz-scheduler.org/api/2.2.1/",
B
Brian Clozel 已提交
226 227 228
		"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/",
229
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/"
C
Chris Beams 已提交
230
	] as String[]
231 232
}

233
configure(subprojects - project(":spring-build-src")) { subproject ->
234
	apply plugin: "merge"
235 236
	apply from: "${gradleScriptDir}/publish-maven.gradle"

S
Stephane Nicoll 已提交
237 238 239 240 241
	configurations {
		jacoco
	}

	dependencies {
242
		jacoco("org.jacoco:org.jacoco.agent:0.7.5.201505241946:runtime")
S
Stephane Nicoll 已提交
243 244 245
	}

	gradle.taskGraph.whenReady {taskGraph ->
246
		if (taskGraph.hasTask(':sonarqube')) {
S
Stephane Nicoll 已提交
247 248 249 250
			test.jvmArgs "-javaagent:${configurations.jacoco.asPath}=destfile=${buildDir}/jacoco.exec,includes=org.springframework.*"
		}
	}

251
	jar {
P
Phillip Webb 已提交
252 253 254 255
		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
256 257 258 259 260

		from("${rootProject.projectDir}/src/dist") {
			include "license.txt"
			include "notice.txt"
			into "META-INF"
P
Phillip Webb 已提交
261
			expand(copyright: new Date().format("yyyy"), version: project.version)
262 263 264 265
		}
	}

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

268 269 270
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = project.name
C
Chris Beams 已提交
271
		options.links(project.ext.javadocLinks)
272
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
273 274 275 276 277

		// 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
278 279
	}

280 281
	task sourcesJar(type: Jar, dependsOn: classes) {
		classifier = 'sources'
282
		from sourceSets.main.allSource
283
		// don't include or exclude anything explicitly by default. See SPR-12085.
284 285 286
	}

	task javadocJar(type: Jar) {
P
Phillip Webb 已提交
287
		classifier = "javadoc"
288 289 290 291 292 293 294
		from javadoc
	}

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
295 296
}

297 298
project("spring-build-src") {
	description = "Exposes gradle buildSrc for IDE support"
299
	apply plugin: "groovy"
300 301 302

	dependencies {
		compile gradleApi()
R
Rob Winch 已提交
303
		compile localGroovy()
304 305 306 307 308
	}

	configurations.archives.artifacts.clear()
}

P
Phillip Webb 已提交
309 310
project("spring-core") {
	description = "Spring Core"
311

312 313
	// 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
314
	// further transformed by the JarJar task to depend on org.springframework.asm; this
315
	// avoids including two different copies of asm unnecessarily.
J
Juergen Hoeller 已提交
316
	def cglibVersion = "3.2.4"
317
	def objenesisVersion = "2.4"
318 319 320 321

	configurations {
		jarjar
		cglib
322
		objenesis
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
	}

	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 已提交
338 339
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
					// as mentioned above, transform cglib"s internal asm dependencies from
340 341
					// 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 已提交
342
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
343 344 345 346 347
				}
			}
		}
	}

348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366
	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")
				}
			}
		}
	}

367
	dependencies {
368
		cglib("cglib:cglib:${cglibVersion}@jar")
369
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
370
		jarjar("com.googlecode.jarjar:jarjar:1.3")
371

P
Phillip Webb 已提交
372
		compile(files(cglibRepackJar))
373
		compile(files(objenesisRepackJar))
374
		compile("commons-logging:commons-logging:1.2")
375
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
376
		optional("net.sf.jopt-simple:jopt-simple:5.0.2")
377
		optional("org.reactivestreams:reactive-streams:${reactivestreamsVersion}")
378
		optional("io.projectreactor:reactor-core:${reactorCoreVersion}")
379
		optional "io.reactivex:rxjava:${rxjavaVersion}"
380
		optional("io.netty:netty-buffer:${nettyVersion}")
381
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
382
		testCompile("xmlunit:xmlunit:${xmlunitVersion}")
383
		testCompile("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") {
P
Phillip Webb 已提交
384 385
			exclude group: "stax", module: "stax-api"
		}
386
		testCompile("javax.xml.bind:jaxb-api:${jaxbVersion}")
387 388 389
	}

	jar {
390
		// inline repackaged cglib classes directly into the spring-core jar
391 392
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
393
			include "org/springframework/cglib/**"
394
		}
395 396 397 398 399

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
400
	}
C
Chris Beams 已提交
401 402
}

P
Phillip Webb 已提交
403 404
project("spring-beans") {
	description = "Spring Beans"
405

406
	dependencies {
407 408
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
409
		optional("javax.inject:javax.inject:1")
410
		optional("javax.el:javax.el-api:${elApiVersion}")
411
		optional("org.yaml:snakeyaml:${snakeyamlVersion}")
412
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
J
Juergen Hoeller 已提交
413
	}
C
Chris Beams 已提交
414 415
}

416 417
project("spring-beans-groovy") {
	description "Groovy Bean Definitions"
J
Juergen Hoeller 已提交
418
	merge.into = project(":spring-beans")
419
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
420 421 422

	dependencies {
		compile(project(":spring-core"))
423
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
J
Juergen Hoeller 已提交
424 425 426 427 428 429 430
	}

	// this module's Java and Groovy sources need to be compiled together
	compileJava.enabled=false
	sourceSets {
		main {
			groovy {
431
				srcDir "src/main/java"
J
Juergen Hoeller 已提交
432 433 434
			}
		}
	}
435 436

	compileGroovy {
437 438
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
439
	}
J
Juergen Hoeller 已提交
440 441
}

P
Phillip Webb 已提交
442 443
project("spring-aop") {
	description = "Spring AOP"
444

445
	dependencies {
446
		compile(project(":spring-beans"))
447 448
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
449
		compile(files(project(":spring-core").objenesisRepackJar))
450
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
451
		optional("org.apache.commons:commons-pool2:2.4.2")
452
		optional("com.jamonapi:jamon:2.81")
453
	}
C
Chris Beams 已提交
454 455
}

P
Phillip Webb 已提交
456 457
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
458

459
	dependencies {
460
		compile(project(":spring-core"))
461
	}
C
Chris Beams 已提交
462 463
}

P
Phillip Webb 已提交
464 465
project("spring-instrument") {
	description = "Spring Instrument"
466

467
	jar {
P
Phillip Webb 已提交
468 469
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
470 471
		manifest.attributes["Agent-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
472 473 474
		manifest.attributes["Can-Redefine-Classes"] = "true"
		manifest.attributes["Can-Retransform-Classes"] = "true"
		manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
475
	}
C
Chris Beams 已提交
476 477
}

P
Phillip Webb 已提交
478 479
project("spring-context") {
	description = "Spring Context"
480
	apply plugin: "groovy"
481

482
	dependencies {
483 484 485 486 487
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
488
		optional(project(":spring-instrument"))
489
		optional("javax.inject:javax.inject:1")
490
		optional("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
491
		optional("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
492
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
493
		optional("javax.money:money-api:1.0")
J
Juergen Hoeller 已提交
494 495
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
		optional("javax.validation:validation-api:${beanvalVersion}")
496
		optional("org.hibernate:hibernate-validator:${hibval5Version}")
497 498
		optional("joda-time:joda-time:${jodaVersion}")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
499
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
500
		optional("org.beanshell:bsh:2.0b4")
501
		testCompile("javax.inject:javax.inject-tck:1")
502 503
		testCompile("javax.el:javax.el-api:${elApiVersion}")
		testCompile("org.glassfish:javax.el:3.0.1-b08")
504
		testCompile("org.javamoney:moneta:1.1")
505
		testCompile("org.apache.commons:commons-pool2:2.4.2")
506
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
	}
}

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

	compileTestJava {
		// necessary to avoid java.lang.VerifyError on jibx compilation
		// see http://jira.codehaus.org/browse/JIBX-465
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
	}

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		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("xmlunit:xmlunit:${xmlunitVersion}")
		testCompile("xpp3:xpp3:1.1.4c")
		testCompile("org.codehaus.jettison:jettison:1.3.7") {
			exclude group: 'stax', module: 'stax-api'
		}
		if (compileTestJava.enabled) {
			testCompile(files(genCastor.classesDir).builtBy(genCastor))
			testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
		}
		testRuntime("xerces:xercesImpl:2.11.0")  // for Castor
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
549
	}
550 551 552 553 554 555 556 557 558
}

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
559
		optional(project(":spring-oxm"))
560
		optional("io.projectreactor:reactor-core:${reactorVersion}") {
561
			force = true  // enforce 2.0.x
562
		}
S
Stephane Maldini 已提交
563
		optional("io.projectreactor:reactor-net:${reactorVersion}") {
564 565
			exclude group: "io.netty", module: "netty-all"
		}
566
		optional("io.netty:netty-all:${nettyVersion}")
B
Brian Clozel 已提交
567
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
568 569
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
570
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
571
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
572
		testCompile("javax.inject:javax.inject-tck:1")
573
		testCompile("javax.servlet:javax.servlet-api:${servletVersion}")
J
Juergen Hoeller 已提交
574
		testCompile("javax.validation:validation-api:${beanvalVersion}")
575
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
576 577 578 579 580
		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 已提交
581
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
582
			exclude group: "javax.servlet", module: "javax.servlet-api"
583
		}
584 585
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}")
586
		testCompile("io.netty:netty-all:${nettyVersion}")
587
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
588
		testCompile("xmlunit:xmlunit:${xmlunitVersion}")
589 590 591 592
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
593
	}
C
Chris Beams 已提交
594 595
}

P
Phillip Webb 已提交
596 597
project("spring-tx") {
	description = "Spring Transaction"
598

599
	dependencies {
600 601
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
602
		optional(project(":spring-aop"))
603
		optional(project(":spring-context"))  // for JCA, @EnableTransactionManagement
604
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
J
Juergen Hoeller 已提交
605
		optional("javax.resource:javax.resource-api:${jcaVersion}")
606
		optional("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
607
		optional("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
608
		optional("com.ibm.websphere:uow:6.0.2.17")
609
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
610
		testCompile("org.eclipse.persistence:javax.persistence:${jpaVersion}")
611
		testCompile("org.codehaus.groovy:groovy-all:${groovyVersion}")
612
	}
C
Chris Beams 已提交
613 614
}

P
Phillip Webb 已提交
615 616
project("spring-jms") {
	description = "Spring JMS"
617

618
	dependencies {
619 620 621 622
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
623
		compile(project(":spring-messaging"))
624
		compile(project(":spring-tx"))
J
Juergen Hoeller 已提交
625
		provided("javax.jms:javax.jms-api:2.0.1")
626
		optional(project(":spring-oxm"))
627
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
J
Juergen Hoeller 已提交
628
		optional("javax.resource:javax.resource-api:${jcaVersion}")
629
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
630
		testRuntime("javax.activation:activation:${activationApiVersion}")
631
	}
C
Chris Beams 已提交
632 633
}

P
Phillip Webb 已提交
634 635
project("spring-jdbc") {
	description = "Spring JDBC"
636

637
	dependencies {
638
		compile(project(":spring-beans"))
639
		compile(project(":spring-core"))
640
		compile(project(":spring-tx"))
641
		optional(project(":spring-context"))  // for JndiDataSourceLookup
642
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
643
		optional("com.mchange:c3p0:0.9.5.2")
P
Phillip Webb 已提交
644
		optional("org.hsqldb:hsqldb:${hsqldbVersion}")
645
		optional("com.h2database:h2:1.4.192")
646 647
		optional("org.apache.derby:derby:10.12.1.1")
		optional("org.apache.derby:derbyclient:10.12.1.1")
648
	}
C
Chris Beams 已提交
649 650
}

P
Phillip Webb 已提交
651 652
project("spring-context-support") {
	description = "Spring Context Support"
653

654
	dependencies {
655 656 657
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
658 659
		optional(project(":spring-jdbc"))  // for Quartz support
		optional(project(":spring-tx"))  // for Quartz support
660
		optional("javax.mail:javax.mail-api:${javamailVersion}")
S
Stephane Nicoll 已提交
661
		optional("javax.cache:cache-api:1.0.0")
B
Ben Manes 已提交
662
		optional("com.github.ben-manes.caffeine:caffeine:${caffeineVersion}")
663
		optional("net.sf.ehcache:ehcache:${ehcacheVersion}")
664
		optional("org.quartz-scheduler:quartz:2.2.3")
665
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
666
		optional("org.freemarker:freemarker:${freemarkerVersion}")
667
		optional("com.lowagie:itext:2.1.7")
668
		testCompile(project(":spring-context"))
669
		testCompile("org.apache.poi:poi:${poiVersion}")
P
Phillip Webb 已提交
670
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
671
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
672
		testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
673
		testRuntime("org.ehcache:jcache:${ehcachejcacheVersion}")
674
	}
C
Chris Beams 已提交
675 676
}

P
Phillip Webb 已提交
677 678
project("spring-web") {
	description = "Spring Web"
679
	apply plugin: "groovy"
680

681 682 683 684 685 686 687 688 689 690 691 692 693 694 695
	// 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"
	}

696
	dependencies {
697 698
		compile(project(":spring-aop"))  // for JaxWsPortProxyFactoryBean
		compile(project(":spring-beans"))  // for MultipartFilter
699
		compile(project(":spring-context"))
700
		compile(project(":spring-core"))
701
		provided "javax.servlet:javax.servlet-api:${servletVersion}"
702
		optional(project(":spring-oxm"))  // for MarshallingHttpMessageConverter
703
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
704
		optional("javax.el:javax.el-api:${elApiVersion}")
705
		optional("javax.faces:javax.faces-api:2.2")
J
Juergen Hoeller 已提交
706
		optional("javax.validation:validation-api:${beanvalVersion}")
707
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
708
		optional("com.caucho:hessian:4.0.38")
709
		optional("commons-fileupload:commons-fileupload:${fileuploadVersion}")
710
		optional("org.reactivestreams:reactive-streams:${reactivestreamsVersion}")
711 712 713 714 715
		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'
		}
716 717
		optional("io.reactivex:rxjava:${rxjavaVersion}")
		optional("io.undertow:undertow-core:${undertowVersion}")
718
		optional("io.netty:netty-buffer:${nettyVersion}") // Temporarily for JsonObjectDecoder
719 720 721
	  	optional("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") { // woodstox before aalto
			exclude group: "stax", module: "stax-api"
		}
722
		optional("com.fasterxml:aalto-xml:1.0.0")
723 724
		optional("org.apache.httpcomponents:httpclient:${httpclientVersion}")
		optional("org.apache.httpcomponents:httpasyncclient:${httpasyncVersion}")
725
		optional("io.netty:netty-all:${nettyVersion}")
726
		optional("com.squareup.okhttp:okhttp:${okhttpVersion}")
727
		optional("com.squareup.okhttp3:okhttp:${okhttp3Version}")
728
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
729
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
R
Roy Clarkson 已提交
730
		optional("com.google.code.gson:gson:${gsonVersion}")
731
		optional("com.rometools:rome:${romeVersion}")
B
Brian Clozel 已提交
732
		optional("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
733
			exclude group: "javax.servlet", module: "javax.servlet-api"
734
		}
B
Brian Clozel 已提交
735
		optional("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
736
			exclude group: "javax.servlet", module: "javax.servlet-api"
737
		}
738 739
		optional("com.google.protobuf:protobuf-java:${protobufVersion}")
		optional("com.google.protobuf:protobuf-java-util:${protobufVersion}")
740
		optional("com.googlecode.protobuf-java-format:protobuf-java-format:1.4")
741
		optional("javax.mail:javax.mail-api:${javamailVersion}")
742
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
743
		testCompile("xmlunit:xmlunit:${xmlunitVersion}")
744
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
745 746 747
		testCompile("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {
			exclude group: "org.apache.taglibs", module: "taglibs-standard-spec"
		}
748
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-joda:${jackson2Version}")
749
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2Version}")
750
		testCompile("com.fasterxml.jackson.module:jackson-module-kotlin:${jackson2Version}")
751
		testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
752 753 754 755 756
		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")
757 758 759 760 761 762 763 764 765 766
		testRuntime("javax.xml.ws:jaxws-api:2.2.11")
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
	}
}

project("spring-web-reactive") {
	description = "Spring Web Reactive"
767

768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795
	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-web"))
		compile "org.reactivestreams:reactive-streams:${reactivestreamsVersion}"
		compile "io.projectreactor:reactor-core:${reactorCoreVersion}"
		optional(project(":spring-context-support"))  // for FreeMarker support
		provided "javax.servlet:javax.servlet-api:${servletVersion}"
		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
		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:${undertowVersion}")
		testCompile("io.reactivex:rxjava:${rxjavaVersion}")
		testCompile("com.fasterxml:aalto-xml:1.0.0")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("javax.validation:validation-api:${beanvalVersion}")
		testCompile("xmlunit:xmlunit:1.6")
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
796
	}
C
Chris Beams 已提交
797 798
}

P
Phillip Webb 已提交
799 800
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
801

802
	dependencies {
803 804 805 806 807 808 809
		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 已提交
810
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
811 812
		optional("org.eclipse.persistence:org.eclipse.persistence.core:${eclipselinkVersion}")
		optional("org.eclipse.persistence:org.eclipse.persistence.jpa:${eclipselinkVersion}") {
813 814
			exclude group: 'org.eclipse.persistence', module: 'javax.persistence'
		}
815
		optional("org.hibernate:hibernate-core:${hibernate5Version}")
816
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
S
Sam Brannen 已提交
817
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
P
Phillip Webb 已提交
818
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
819
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
820
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
821
	}
C
Chris Beams 已提交
822 823
}

P
Phillip Webb 已提交
824 825
project("spring-webmvc") {
	description = "Spring Web MVC"
826

827
	dependencies {
828
		compile(project(":spring-aop"))
829 830
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
831
		compile(project(":spring-core"))
832
		compile(files(project(":spring-core").objenesisRepackJar))
833 834
		compile(project(":spring-expression"))
		compile(project(":spring-web"))
835
		provided("javax.servlet:javax.servlet-api:${servletVersion}")
836
		optional(project(":spring-context-support"))  // for FreeMarker support
837
		optional(project(":spring-oxm"))  // for MarshallingView
838
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
839
		optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1")
840 841
		optional("org.apache.poi:poi:${poiVersion}")
		optional("org.apache.poi:poi-ooxml:${poiVersion}")
842
		optional("org.freemarker:freemarker:${freemarkerVersion}")
843
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
844 845
		optional("com.lowagie:itext:2.1.7")
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
846
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
847
		optional("com.rometools:rome:${romeVersion}")
848
		optional("javax.el:javax.el-api:${elApiVersion}")
849 850
		optional("org.apache.tiles:tiles-api:${tiles3Version}")
		optional("org.apache.tiles:tiles-core:${tiles3Version}") {
851 852
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
853
		optional("org.apache.tiles:tiles-servlet:${tiles3Version}") {
854 855
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
856
		optional("org.apache.tiles:tiles-jsp:${tiles3Version}") {
857 858
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
859
		optional("org.apache.tiles:tiles-el:${tiles3Version}") {
860 861
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
862
		optional("org.apache.tiles:tiles-extras:${tiles3Version}") {
863 864 865
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
			exclude group: "org.springframework", module: "spring-web"
		}
866
		optional('org.webjars:webjars-locator:0.32')
867
		testCompile("xmlunit:xmlunit:${xmlunitVersion}")
868
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
869
			exclude group: "xml-apis", module: "xml-apis"
870 871
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
872 873 874
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
875
		}
B
Brian Clozel 已提交
876
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
877
			exclude group: "javax.servlet", module: "javax.servlet"
878
		}
B
Brian Clozel 已提交
879
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
880
			exclude group: "javax.servlet", module: "javax.servlet"
881
		}
J
Juergen Hoeller 已提交
882
		testCompile("javax.validation:validation-api:${beanvalVersion}")
883
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
884 885
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}")
		testCompile("commons-fileupload:commons-fileupload:${fileuploadVersion}")
886
		testCompile("commons-io:commons-io:1.3")
887
		testCompile("joda-time:joda-time:${jodaVersion}")
888
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
889
		testCompile("org.mozilla:rhino:1.7.7.1")
890 891 892
		testRuntime("org.jruby:jruby:9.1.2.0")
		testRuntime("org.python:jython-standalone:2.5.3")
		testRuntime("org.webjars:underscorejs:1.8.3")
893 894 895 896
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
897 898 899
	}
}

900 901 902 903 904 905 906 907 908
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"))
909 910
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934
		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"
		}
935
		optional("org.jboss.xnio:xnio-api:3.3.7.Final")
936 937 938
		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}")
939
		testCompile("io.projectreactor:reactor-core:${reactorVersion}") {
940
			force = true  // enforce 2.0.x
941
		}
942 943 944
		testCompile("io.projectreactor:reactor-net:${reactorVersion}")
		testCompile("io.netty:netty-all:${nettyVersion}")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
945 946
		testRuntime("org.jboss.xnio:xnio-nio:3.3.7.Final")
		testRuntime("org.jboss.logging:jboss-logging:3.3.0.Final")
947 948 949
	}
}

P
Phillip Webb 已提交
950 951
project("spring-test") {
	description = "Spring TestContext Framework"
952

953
	dependencies {
954
		compile(project(":spring-core"))
955 956 957 958 959 960 961
		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"))
962
		optional(project(":spring-websocket"))
963
		optional("junit:junit:${junitVersion}")
964
		optional("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
965
		optional("org.testng:testng:${testngVersion}")
966
		optional("javax.inject:javax.inject:1")
967 968
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
969 970 971 972
		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"
		}
973
		optional("javax.el:javax.el-api:${elApiVersion}")
974
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
975
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
S
Sam Brannen 已提交
976
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
977
		optional("org.hamcrest:hamcrest-core:${hamcrestVersion}")
978
		optional("xmlunit:xmlunit:${xmlunitVersion}")
979 980
		optional("net.sourceforge.htmlunit:htmlunit:2.22")
		optional("org.seleniumhq.selenium:htmlunit-driver:2.21")
981 982 983
		optional("org.seleniumhq.selenium:selenium-java:2.53.1") {
			exclude group: "io.netty", module: "netty"
		}
984 985
		optional("org.skyscreamer:jsonassert:1.3.0")
		optional("com.jayway.jsonpath:json-path:2.2.0")
986 987
		testCompile(project(":spring-context-support"))
		testCompile(project(":spring-oxm"))
988
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
989
		testCompile("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
990
		testCompile("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
991
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
992
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
993 994
		// Enable use of the JUnitPlatform Runner
		testCompile("org.junit.platform:junit-platform-runner:${junitPlatformVersion}")
995
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
996
		testCompile("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
997
		testCompile("com.rometools:rome:${romeVersion}")
998 999
		testCompile("org.apache.tiles:tiles-api:${tiles3Version}")
		testCompile("org.apache.tiles:tiles-core:${tiles3Version}") {
1000 1001
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
1002
		testCompile("org.apache.tiles:tiles-servlet:${tiles3Version}") {
1003 1004
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
1005
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
S
Sam Brannen 已提交
1006
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
1007
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}")
1008
		testCompile("javax.cache:cache-api:1.0.0")
1009
		testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")
1010 1011
		// Java Util Logging for JUnit 5.
		testRuntime("org.apache.logging.log4j:log4j-jul:${log4jVersion}")
1012
		testRuntime("org.ehcache:ehcache:${ehcache3Version}")
J
Juergen Hoeller 已提交
1013
		testRuntime("org.terracotta:management-model:2.0.0")
1014 1015 1016 1017
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
1018
	}
1019 1020

	task testNG(type: Test) {
1021
		description = 'Runs TestNG tests.'
1022
		useTestNG()
1023
		scanForTestClasses = false
1024 1025
		include(["**/testng/**/*Tests.class", "**/testng/**/*Test.class"])
		// Show STD_OUT & STD_ERR of the test JVM(s) on the console:
1026
		// testLogging.showStandardStreams = true
1027
		// forkEvery 1
1028 1029 1030
	}

	test {
1031
		description = 'Runs JUnit tests.'
1032 1033
		dependsOn testNG
		useJUnit()
1034 1035 1036
		scanForTestClasses = false
		include(['**/*Tests.class', '**/*Test.class', '**/SpringJUnitJupiterTestSuite.class'])
		exclude(['**/testng/**/*.*'])
1037 1038
		// Java Util Logging for JUnit 5.
		// systemProperty('java.util.logging.manager', 'org.apache.logging.log4j.jul.LogManager')
1039
	}
1040 1041

	task aggregateTestReports(type: TestReport) {
1042
		description = 'Aggregates JUnit and TestNG test reports.'
1043 1044 1045 1046 1047
		destinationDir = test.reports.html.destination
		reportOn test, testNG
	}

	check.dependsOn aggregateTestReports
C
Chris Beams 已提交
1048 1049
}

P
Phillip Webb 已提交
1050 1051 1052
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
1053

1054
	dependencies {
1055
		aspects(project(":spring-orm"))
1056 1057 1058
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
1059
		provided("org.eclipse.persistence:javax.persistence:${jpaVersion}")
1060 1061 1062 1063 1064 1065
		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
1066
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")  // for @javax.transaction.Transactional support
S
Stephane Nicoll 已提交
1067
		optional("javax.cache:cache-api:1.0.0")
1068
		testCompile(project(":spring-core"))  // for CodeStyleAspect
1069
		testCompile(project(":spring-test"))
1070
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
1071
	}
1072

1073
	eclipse.project {
P
Phillip Webb 已提交
1074
		natures += "org.eclipse.ajdt.ui.ajnature"
1075
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
1076
	}
C
Chris Beams 已提交
1077 1078
}

1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113
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)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

1114 1115
sonarqube {
	properties {
S
Stephane Nicoll 已提交
1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127
		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"
	}
}

1128
configure(rootProject) {
P
Phillip Webb 已提交
1129
	description = "Spring Framework"
1130

B
Brian Clozel 已提交
1131
	apply plugin: "org.asciidoctor.convert"
1132
	apply plugin: "docbook-reference"
1133
	apply plugin: "groovy"
R
Rob Winch 已提交
1134

1135
	// apply plugin: "detect-split-packages"
1136 1137
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
1138
	asciidoctor {
B
Brian Clozel 已提交
1139 1140
		sourceDir project.file('src/asciidoc')
		separateOutputDirs = false
1141
		backends = ['docbook']
B
Brian Clozel 已提交
1142
		options doctype: 'book', eruby: 'erubis'
J
Juergen Hoeller 已提交
1143
		attributes 'spring-version': project.version, 'revnumber': project.version, 'docinfo': ""
1144 1145
	}

1146 1147 1148
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
1149
		epubFilename = "spring-framework-reference.epub"
1150 1151 1152 1153 1154 1155 1156
		expandPlaceholders = ""
	}

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

1157 1158 1159 1160 1161
	// 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")
	// }
1162

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

1166
	dependencies {  // for integration tests
1167
		testCompile(project(":spring-aop"))
1168
		testCompile(project(":spring-beans"))
1169
		testCompile(project(":spring-context"))
1170 1171
		testCompile(project(":spring-core"))
		testCompile(project(":spring-expression"))
1172
		testCompile(project(":spring-jdbc"))
1173
		testCompile(project(":spring-orm"))
1174
		testCompile(project(":spring-test"))
1175
		testCompile(project(":spring-tx"))
1176
		testCompile(project(":spring-web"))
1177
		testCompile("javax.servlet:javax.servlet-api:${servletVersion}")
1178
		testCompile("javax.inject:javax.inject:1")
J
Juergen Hoeller 已提交
1179
		testCompile("javax.resource:javax.resource-api:${jcaVersion}")
1180
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
1181
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
P
Phillip Webb 已提交
1182
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
1183 1184 1185
	}

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

1190 1191 1192 1193 1194
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
1195 1196 1197
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
1198
		options.overview = "src/api/overview.html"
1199
		options.stylesheetFile = file("src/api/stylesheet.css")
1200
		options.splitIndex = true
C
Chris Beams 已提交
1201
		options.links(project.ext.javadocLinks)
1202
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
1203

1204 1205 1206
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
1207

P
Phillip Webb 已提交
1208
		maxMemory = "1024m"
C
Chris Beams 已提交
1209
		destinationDir = new File(buildDir, "api")
1210 1211 1212

		doFirst {
			classpath = files(
1213 1214
                // ensure Servlet 3.x has precedence on the javadoc classpath
                project(":spring-webmvc").sourceSets.main.compileClasspath.files.find { it =~ "servlet-api" },
1215 1216 1217 1218 1219
				// 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 })
		}
1220 1221
	}

1222
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1223 1224 1225
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1226 1227 1228
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1229 1230
		from("src/dist") {
			include "changelog.txt"
1231 1232 1233
		}

		from (api) {
1234
			into "javadoc-api"
1235 1236
		}

1237 1238
		from (reference) {
			into "spring-framework-reference"
1239 1240 1241 1242
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1243 1244 1245
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1246 1247
		description = "Builds -${classifier} archive containing all " +
			"XSDs for deployment at http://springframework.org/schema."
S
Stephane Nicoll 已提交
1248
		duplicatesStrategy 'exclude'
1249
		moduleProjects.each { subproject ->
1250 1251 1252
			def Properties schemas = new Properties();

			subproject.sourceSets.main.resources.find {
P
Phillip Webb 已提交
1253
				it.path.endsWith("META-INF/spring.schemas")
1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270
			}?.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 已提交
1271 1272 1273
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1274
		description = "Builds -${classifier} archive, containing all jars and docs, " +
J
Juergen Hoeller 已提交
1275
			"suitable for community download page."
1276 1277 1278

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

P
Phillip Webb 已提交
1279 1280 1281 1282
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1283
			into "${baseDir}"
P
Phillip Webb 已提交
1284
			expand(copyright: new Date().format("yyyy"), version: project.version)
1285 1286 1287 1288 1289 1290 1291 1292 1293 1294
		}

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

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

1295
		moduleProjects.each { subproject ->
1296 1297
			into ("${baseDir}/libs") {
				from subproject.jar
P
Phillip Webb 已提交
1298
				if (subproject.tasks.findByPath("sourcesJar")) {
1299 1300
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1301
				if (subproject.tasks.findByPath("javadocJar")) {
1302 1303 1304 1305 1306 1307
					from subproject.javadocJar
				}
			}
		}
	}

1308
	// Create a distribution that contains all dependencies (required and optional).
1309 1310
	// Not published by default; only for use when building from source.
	task depsZip(type: Zip, dependsOn: distZip) { zipTask ->
P
Phillip Webb 已提交
1311 1312 1313
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1314 1315 1316 1317 1318 1319 1320 1321 1322 1323
		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 ->
1324 1325
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346
						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 已提交
1347
		description = "Generates gradlew[.bat] scripts"
1348
		gradleVersion = "2.14.1"
1349 1350

		doLast() {
1351
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1352
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1353
			File wrapperFile = file("gradlew")
1354 1355
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1356
			File wrapperBatFile = file("gradlew.bat")
1357 1358 1359 1360
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1361

1362
}
1363

S
Stephane Nicoll 已提交
1364
configure([project(':spring-build-src'), project(':spring-framework-bom')]) {
1365
	sonarqube {
S
Stephane Nicoll 已提交
1366 1367 1368 1369 1370
		skipProject = true
	}
}

configure(project(':spring-core')) {
1371 1372
	sonarqube {
		properties {
S
Stephane Nicoll 已提交
1373 1374 1375 1376 1377 1378
			property "sonar.exclusions",
					"src/main/java/org/springframework/cglib/**/*,src/main/java/org/springframework/asm/**/*"
		}
	}
}

1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389
/*
 * 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-")) {
1390
			return version.replace('BUILD', qualifier)
1391 1392
		}
	}
1393
	return version
1394
}