build.gradle 51.0 KB
Newer Older
1
buildscript {
2
	ext.kotlinVersion = '1.1.2-eap-77'
3
	repositories {
4
		maven { url "https://repo.spring.io/plugins-release" }
5
		maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
6 7
	}
	dependencies {
8
		classpath("io.spring.gradle:dependency-management-plugin:1.0.0.RELEASE")
R
Rob Winch 已提交
9
		classpath("io.spring.gradle:propdeps-plugin:0.0.8")
10
		classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
11
		classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
12 13 14
		classpath("org.asciidoctor:asciidoctor-gradle-plugin:1.5.3")
		classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.14")
		classpath("org.asciidoctor:asciidoctorj-epub3:1.5.0-alpha.6")
15
	}
16 17
}

18
plugins {
19
	id "org.sonarqube" version "2.2.1"
20 21
}

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

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

C
Chris Beams 已提交
35
configure(allprojects) { project ->
36 37
	group = "org.springframework"
	version = qualifyVersionIfNecessary(version)
38

39
	ext.activationApiVersion   = "1.1.1"
40
	ext.annotationApiVersion   = "1.2"
J
Juergen Hoeller 已提交
41
	ext.aspectjVersion         = "1.9.0.BETA-5"
42
	ext.beanvalVersion         = "1.1.0.Final"
43
	ext.cacheApiVersion        = "1.0.0"
44
	ext.caffeineVersion        = "2.4.0"
45
	ext.eclipselinkVersion     = "2.6.4"
46
	ext.ehcacheVersion         = "2.10.4"
47
	ext.ehcachejcacheVersion   = "1.0.1"
48
	ext.ehcache3Version        = "3.3.1"
49
	ext.ejbApiVersion          = "3.2"
J
Juergen Hoeller 已提交
50
	ext.elApiVersion           = "3.0.1-b04"
51
	ext.fileuploadVersion      = "1.3.2"
52
	ext.freemarkerVersion      = "2.3.26-incubating"
53
	ext.groovyVersion          = "2.4.10"
54
	ext.gsonVersion            = "2.8.0"
55
	ext.hamcrestVersion        = "1.3"
56
	ext.hibernate5Version      = "5.2.10.Final"
57
	ext.hibval5Version         = "5.4.1.Final"
58
	ext.hsqldbVersion          = "2.4.0"
59
	ext.httpasyncVersion       = "4.1.3"
60
	ext.httpclientVersion      = "4.5.3"
61
	ext.interceptorApiVersion  = "1.2"
S
Sebastien Deleuze 已提交
62
	ext.jackson2Version        = "2.9.0.pr2"
63
	ext.javamailVersion        = "1.6.0-rc1"
64
	ext.jaxbVersion            = "2.2.11"
65
	ext.jaxwsVersion           = "2.2.11"
66
	ext.jcaVersion             = "1.7"
67
	ext.jettyVersion           = "9.4.4.v20170414"
68
	ext.jmsVersion             = "2.0.1"
69
	ext.jodaVersion            = "2.9.9"
70
	ext.jpaVersion             = "2.1.1"
71
	ext.jsfVersion             = "2.2"
72 73 74
	ext.jspVersion             = "2.3.2-b02"
	ext.jtaVersion             = "1.2"
	ext.junitVersion           = "4.12"
75
	ext.junitVintageVersion    = "4.12.0-M4"
S
Sam Brannen 已提交
76 77
	ext.junitJupiterVersion    = '5.0.0-M4'
	ext.junitPlatformVersion   = '1.0.0-M4'
78
	ext.log4jVersion           = '2.8.2'
79
	ext.nettyVersion           = "4.1.9.Final"
80 81
	ext.okhttp3Version         = "3.7.0"
	ext.poiVersion             = "3.16"
82
	ext.protobufVersion        = "3.2.0"
83
	ext.quartzVersion          = "2.2.3"
S
Sebastien Deleuze 已提交
84
	ext.reactorVersion         = "Bismuth-BUILD-SNAPSHOT"
85
	ext.romeVersion            = "1.7.2"
86
	ext.rxjavaVersion          = '1.2.9'
87
	ext.rxjavaAdapterVersion   = '1.2.1'
88
	ext.rxjava2Version         = '2.0.9'
89
	ext.rxnettyVersion         = '0.5.2'
90
	ext.servletVersion         = "3.1.0"
91
	ext.slf4jVersion           = "1.7.25"
92
	ext.snakeyamlVersion       = "1.18"
93
	ext.testngVersion          = "6.11"
J
Juergen Hoeller 已提交
94
	ext.tiles3Version          = "3.0.7"
95
	ext.tomcatVersion          = "8.5.14"
96
	ext.tyrusVersion           = "1.13.1"
97
	ext.undertowVersion        = "1.4.13.Final"
98
	ext.websocketVersion       = "1.1"
99
	ext.woodstoxVersion        = "5.0.3"
100
	ext.xmlunitVersion         = "2.3.0"
101
	ext.xnioVersion            = "3.4.5.Final"
102
	ext.xstreamVersion         = "1.4.9"
103

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

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

S
Sebastien Deleuze 已提交
112 113 114
	// Kotlin compiler does not support JDK 9 yet, see https://youtrack.jetbrains.com/issue/KT-14988
	if (!JavaVersion.current().java9Compatible) {
		apply plugin: "kotlin"
115 116
		compileKotlin {
			kotlinOptions.jvmTarget = "1.8"
117 118
			kotlinOptions.freeCompilerArgs = ["-Xskip-runtime-version-check"]

119 120 121
		}
		compileTestKotlin {
			kotlinOptions.jvmTarget = "1.8"
122
			kotlinOptions.freeCompilerArgs = ["-Xskip-runtime-version-check"]
123
		}
S
Sebastien Deleuze 已提交
124 125
	}

126
	configurations.all {
J
Juergen Hoeller 已提交
127
		// Check for updates every build
128 129
		resolutionStrategy.cacheChangingModulesFor 0, 'seconds'

J
Juergen Hoeller 已提交
130
		// Consistent netty version (e.g. clashes between netty-all vs netty-common)
131 132 133 134 135 136 137
		resolutionStrategy.eachDependency { DependencyResolveDetails details ->
			if (details.requested.group == 'io.netty') {
				details.useVersion nettyVersion
			}
		}
	}

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

P
Phillip Webb 已提交
146
	compileTestJava.options*.compilerArgs = [
147
		"-Xlint:serial", "-Xlint:-varargs", "-Xlint:cast", "-Xlint:classfile",
P
Phillip Webb 已提交
148
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
S
Stephane Nicoll 已提交
149
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
P
Phillip Webb 已提交
150 151 152
		"-Xlint:try", "-Xlint:-fallthrough", "-Xlint:-rawtypes", "-Xlint:-deprecation",
		"-Xlint:-unchecked", "-Xlint:-options"]

153
	compileJava {
154 155
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
156
		options.encoding = 'UTF-8'
157 158 159
	}

	compileTestJava {
J
Juergen Hoeller 已提交
160 161
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
162
		options.encoding = 'UTF-8'
163
		options.compilerArgs += "-parameters"
J
Juergen Hoeller 已提交
164 165
	}

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

178
	repositories {
B
Brian Clozel 已提交
179
		maven { url "https://repo.spring.io/libs-release" }
180
		maven { url "https://repo.spring.io/libs-snapshot" }
181
		maven { url "https://repo.spring.io/milestone" }
182
		maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
183
	}
C
Chris Beams 已提交
184

185
	dependencies {
186 187 188
		testCompile("junit:junit:${junitVersion}") {
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
189
		testCompile("org.mockito:mockito-core:2.6.1") {
190 191
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
192
		testCompile("org.hamcrest:hamcrest-all:${hamcrestVersion}")
193
		testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}")
194
	}
C
Chris Beams 已提交
195 196

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

217
configure(subprojects - project(":spring-build-src")) { subproject ->
218
	apply plugin: "merge"
219
	apply from: "${gradleScriptDir}/publish-maven.gradle"
220 221 222 223 224 225 226 227 228 229 230
	apply plugin: "io.spring.dependency-management"

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

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

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

245
	jar {
P
Phillip Webb 已提交
246 247 248 249
		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
250 251 252 253 254

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

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

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

269 270
		// Suppress warnings due to cross-module @see and @link references.
		// Note that global 'api' task does display all warnings.
C
Chris Beams 已提交
271
		logging.captureStandardError LogLevel.INFO
272
		logging.captureStandardOutput LogLevel.INFO  // suppress "## warnings" message
273 274
	}

275
	task sourcesJar(type: Jar, dependsOn: classes) {
276
		duplicatesStrategy = DuplicatesStrategy.EXCLUDE
277
		classifier = 'sources'
278
		from sourceSets.main.allSource
279
		// Don't include or exclude anything explicitly by default. See SPR-12085.
280 281 282
	}

	task javadocJar(type: Jar) {
P
Phillip Webb 已提交
283
		classifier = "javadoc"
284 285 286 287 288 289 290
		from javadoc
	}

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
291 292
}

293 294
project("spring-build-src") {
	description = "Exposes gradle buildSrc for IDE support"
295

296
	apply plugin: "groovy"
297 298 299

	dependencies {
		compile gradleApi()
R
Rob Winch 已提交
300
		compile localGroovy()
301 302 303 304 305
	}

	configurations.archives.artifacts.clear()
}

P
Phillip Webb 已提交
306 307
project("spring-core") {
	description = "Spring Core"
308

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

	configurations {
		jarjar
		cglib
319
		objenesis
320 321 322 323 324 325 326 327 328 329 330 331 332 333
	}

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

		doLast() {
			project.ant {
				taskdef name: "jarjar", classname: "com.tonicsystems.jarjar.JarJarTask",
					classpath: configurations.jarjar.asPath
				jarjar(destfile: repackJar.archivePath) {
					configurations.cglib.each { originalJar ->
						zipfileset(src: originalJar)
					}
J
Juergen Hoeller 已提交
334
					// Repackage net.sf.cglib => org.springframework.cglib
P
Phillip Webb 已提交
335
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
J
Juergen Hoeller 已提交
336
					// As mentioned above, transform cglib"s internal asm dependencies from
337 338
					// 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 已提交
339
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
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)
					}
J
Juergen Hoeller 已提交
357
					// Repackage org.objenesis => org.springframework.objenesis
358 359 360 361 362 363
					rule(pattern: "org.objenesis.**", result: "org.springframework.objenesis.@1")
				}
			}
		}
	}

364
	dependencies {
365
		cglib("cglib:cglib:${cglibVersion}@jar")
366
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
367
		jarjar("com.googlecode.jarjar:jarjar:1.3")
368

P
Phillip Webb 已提交
369
		compile(files(cglibRepackJar))
370
		compile(files(objenesisRepackJar))
371 372
		optional("org.apache.logging.log4j:log4j-api:${log4jVersion}")
		optional("org.slf4j:slf4j-api:${slf4jVersion}")
373
		optional("net.sf.jopt-simple:jopt-simple:5.0.3")
374
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
375
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
376
		optional("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}")
377 378
		optional("org.reactivestreams:reactive-streams")
		optional("io.projectreactor:reactor-core")
379 380 381
		optional("io.reactivex:rxjava:${rxjavaVersion}")
		optional("io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}")
		optional("io.reactivex.rxjava2:rxjava:${rxjava2Version}")
382
		optional("io.netty:netty-buffer:${nettyVersion}")
383
		testCompile("io.projectreactor.addons:reactor-test")
384
		testCompile("javax.xml.bind:jaxb-api:${jaxbVersion}")
385
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
386
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
387
		testCompile("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") {
P
Phillip Webb 已提交
388 389
			exclude group: "stax", module: "stax-api"
		}
390 391 392
	}

	jar {
J
Juergen Hoeller 已提交
393
		// Inline repackaged cglib classes directly into spring-core jar
394 395
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
396
			include "org/springframework/cglib/**"
397
		}
398 399 400 401 402

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
403
	}
C
Chris Beams 已提交
404 405
}

P
Phillip Webb 已提交
406 407
project("spring-beans") {
	description = "Spring Beans"
408

409
	dependencies {
410 411
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
412
		optional("javax.inject:javax.inject:1")
413
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
414
		optional("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}")
415
		optional("org.yaml:snakeyaml:${snakeyamlVersion}")
416
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
J
Juergen Hoeller 已提交
417
	}
C
Chris Beams 已提交
418 419
}

420 421
project("spring-beans-groovy") {
	description "Groovy Bean Definitions"
422

J
Juergen Hoeller 已提交
423
	merge.into = project(":spring-beans")
424
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
425 426 427

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

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

	compileGroovy {
442 443
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
444
	}
J
Juergen Hoeller 已提交
445 446
}

P
Phillip Webb 已提交
447 448
project("spring-aop") {
	description = "Spring AOP"
449

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

P
Phillip Webb 已提交
461 462
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
463

464
	dependencies {
465
		compile(project(":spring-core"))
466
	}
C
Chris Beams 已提交
467 468
}

P
Phillip Webb 已提交
469 470
project("spring-instrument") {
	description = "Spring Instrument"
471

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

P
Phillip Webb 已提交
483 484
project("spring-context") {
	description = "Spring Context"
485

486
	apply plugin: "groovy"
487

488
	dependencies {
489 490 491 492 493
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
494
		optional(project(":spring-instrument"))
495
		optional("javax.inject:javax.inject:1")
496 497
		optional("javax.annotation:javax.annotation-api:${annotationApiVersion}")
		optional("javax.xml.ws:jaxws-api:${jaxwsVersion}")
498
		optional("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
499
		optional("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
500
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
501
		optional("javax.money:money-api:1.0.1")
J
Juergen Hoeller 已提交
502 503
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
		optional("javax.validation:validation-api:${beanvalVersion}")
504
		optional("org.hibernate:hibernate-validator:${hibval5Version}")
505 506
		optional("joda-time:joda-time:${jodaVersion}")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
507
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
508
		optional("org.beanshell:bsh:2.0b5")
509
		optional("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}")
510
		testCompile("org.apache.commons:commons-pool2:2.4.2")
511
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
512
		testCompile("javax.inject:javax.inject-tck:1")
513
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
514 515 516
		testRuntime("javax.el:javax.el-api:${elApiVersion}")
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
		testRuntime("org.javamoney:moneta:1.1")
517 518 519 520 521 522 523 524 525 526
	}
}

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
527 528
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
		optional("javax.activation:activation:${activationApiVersion}")
529 530 531
		optional("org.codehaus.castor:castor-xml:1.4.1")  {
			exclude group: 'stax', module: 'stax-api'
			exclude group: "org.springframework", module: "spring-context"
532
			exclude group: "commons-logging", module: "commons-logging"
533 534 535 536 537
		}
		optional("com.thoughtworks.xstream:xstream:${xstreamVersion}") {
			exclude group: 'xpp3', module: 'xpp3_min'
			exclude group: 'xmlpull', module: 'xmlpull'
		}
538
		optional("org.jibx:jibx-run:1.3.1")
539 540
		testCompile(project(":spring-context"))
		testCompile("xpp3:xpp3:1.1.4c")
541
		testCompile("org.codehaus.jettison:jettison:1.3.8") {
542 543
			exclude group: 'stax', module: 'stax-api'
		}
544
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
545 546
        testCompile(files(genCastor.classesDir).builtBy(genCastor))
        testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
547 548 549
		testRuntime("xerces:xercesImpl:2.11.0")  // for Castor
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
550
	}
551 552 553 554 555 556 557 558 559
}

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

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

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

P
Phillip Webb 已提交
599 600
project("spring-tx") {
	description = "Spring Transaction"
601

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

P
Phillip Webb 已提交
618 619
project("spring-jms") {
	description = "Spring JMS"
620

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

P
Phillip Webb 已提交
637 638
project("spring-jdbc") {
	description = "Spring JDBC"
639

640
	dependencies {
641
		compile(project(":spring-beans"))
642
		compile(project(":spring-core"))
643
		compile(project(":spring-tx"))
644
		optional(project(":spring-context"))  // for JndiDataSourceLookup
645
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
P
Phillip Webb 已提交
646
		optional("org.hsqldb:hsqldb:${hsqldbVersion}")
647
		optional("com.h2database:h2:1.4.194")
648 649
		optional("org.apache.derby:derby:10.13.1.1")
		optional("org.apache.derby:derbyclient:10.13.1.1")
M
Mario Arias 已提交
650
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
651
		optional("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}")
652
	}
C
Chris Beams 已提交
653 654
}

P
Phillip Webb 已提交
655 656
project("spring-context-support") {
	description = "Spring Context Support"
657

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

682 683 684 685 686 687 688 689 690 691 692
project("spring-context-indexer") {
	description = "Spring Context Indexer"

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

P
Phillip Webb 已提交
693 694
project("spring-web") {
	description = "Spring Web"
S
Sebastien Deleuze 已提交
695

696
	apply plugin: "groovy"
697

698
	dependencies {
699 700
		compile(project(":spring-aop"))  // for JaxWsPortProxyFactoryBean
		compile(project(":spring-beans"))  // for MultipartFilter
701
		compile(project(":spring-context"))
702
		compile(project(":spring-core"))
703
		provided "javax.servlet:javax.servlet-api:${servletVersion}"
704
		optional(project(":spring-oxm"))  // for MarshallingHttpMessageConverter
705
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
706
		optional("javax.el:javax.el-api:${elApiVersion}")
707
		optional("javax.faces:javax.faces-api:${jsfVersion}")
J
Juergen Hoeller 已提交
708
		optional("javax.validation:validation-api:${beanvalVersion}")
709
		optional("javax.activation:activation:${activationApiVersion}")
710
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
711
		optional("com.caucho:hessian:4.0.38")
712
		optional("commons-fileupload:commons-fileupload:${fileuploadVersion}")
713 714 715
		optional("org.reactivestreams:reactive-streams")
		optional("io.projectreactor:reactor-core")
		optional("io.projectreactor.ipc:reactor-netty")
716
		optional("io.reactivex:rxjava:${rxjavaVersion}")
717
		optional("io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}")
718
		optional("io.reactivex.rxjava2:rxjava:${rxjava2Version}")
B
Brian Clozel 已提交
719
		optional("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
720
		optional("io.undertow:undertow-core:${undertowVersion}")
721
		optional("org.jboss.xnio:xnio-api:${xnioVersion}")
722 723
		optional("io.netty:netty-buffer:${nettyVersion}")  // temporarily for JsonObjectDecoder
	  	optional("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") {  // woodstox before aalto
724 725
			exclude group: "stax", module: "stax-api"
		}
726
		optional("com.fasterxml:aalto-xml:1.0.0")
727 728 729 730 731 732
		optional("org.apache.httpcomponents:httpclient:${httpclientVersion}") {
			exclude group: "commons-logging", module: "commons-logging"
		}
		optional("org.apache.httpcomponents:httpasyncclient:${httpasyncVersion}") {
			exclude group: "commons-logging", module: "commons-logging"
		}
733
		optional("io.netty:netty-all:${nettyVersion}")
734
		optional("com.squareup.okhttp3:okhttp:${okhttp3Version}")
735
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
736
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
737 738
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-smile:${jackson2Version}")
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${jackson2Version}")
R
Roy Clarkson 已提交
739
		optional("com.google.code.gson:gson:${gsonVersion}")
740
		optional("javax.json.bind:javax.json.bind-api:1.0.0-M2")
741
		optional("com.rometools:rome:${romeVersion}")
B
Brian Clozel 已提交
742
		optional("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
743
			exclude group: "javax.servlet", module: "javax.servlet-api"
744
		}
B
Brian Clozel 已提交
745
		optional("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
746
			exclude group: "javax.servlet", module: "javax.servlet-api"
747
		}
748 749
		optional("com.google.protobuf:protobuf-java:${protobufVersion}")
		optional("com.google.protobuf:protobuf-java-util:${protobufVersion}")
750
		optional("com.googlecode.protobuf-java-format:protobuf-java-format:1.4")
751 752
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
		optional("javax.xml.ws:jaxws-api:${jaxwsVersion}")
753
		optional("javax.mail:javax.mail-api:${javamailVersion}")
754
		optional("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}")
755
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
756
		testCompile("io.projectreactor.addons:reactor-test")
757 758 759
		testCompile("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {
			exclude group: "org.apache.taglibs", module: "taglibs-standard-spec"
		}
760
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-joda:${jackson2Version}")
761
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2Version}")
762
		testCompile("com.fasterxml.jackson.module:jackson-module-kotlin:${jackson2Version}")
763 764 765 766
		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}")
767 768 769
		testCompile("io.reactivex:rxnetty-http:${rxnettyVersion}") {
			exclude group: 'io.reactivex', module: 'rxjava'
		}
770 771
		testCompile("com.squareup.okhttp3:mockwebserver:${okhttp3Version}")
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
S
Sebastien Deleuze 已提交
772
		testCompile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
773
		testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
774 775
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
776
		testRuntime("org.jboss.xnio:xnio-nio:${xnioVersion}")
777
		testRuntime("org.jboss.logging:jboss-logging:3.3.1.Final")
778
	}
779 780 781 782 783

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

786 787
project("spring-webflux") {
	description = "Spring WebFlux"
788

789 790 791
	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-web"))
792 793
		compile("org.reactivestreams:reactive-streams")
		compile("io.projectreactor:reactor-core")
794 795
		optional(project(":spring-context-support"))  // for FreeMarker support
		provided "javax.servlet:javax.servlet-api:${servletVersion}"
796
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
797 798
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		optional("org.freemarker:freemarker:${freemarkerVersion}")
799 800 801
		optional("org.apache.httpcomponents:httpclient:${httpclientVersion}") {
			exclude group: "commons-logging", module: "commons-logging"
		}
802
		optional('org.webjars:webjars-locator:0.32-1')
803
		optional("io.projectreactor.ipc:reactor-netty")
804 805
		optional("io.reactivex:rxjava:${rxjavaVersion}")
		optional("io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}")
806 807 808 809 810
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
		optional("org.apache.tomcat:tomcat-websocket:${tomcatVersion}") {
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
811 812 813
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
			exclude group: "javax.servlet", module: "javax.servlet"
		}
814 815 816
		optional("io.undertow:undertow-websockets-jsr:${undertowVersion}") {
			exclude group: "org.jboss.spec.javax.websocket", module: "jboss-websocket-api_1.1_spec"
		}
817
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
818
		optional("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}")
819
		testCompile("io.projectreactor.addons:reactor-test")
820
		testCompile("javax.validation:validation-api:${beanvalVersion}")
R
Rossen Stoyanchev 已提交
821
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
822 823 824 825
		testCompile("org.apache.tomcat:tomcat-util:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}")
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}")
S
Sebastien Deleuze 已提交
826
		testCompile "io.reactivex.rxjava2:rxjava:${rxjava2Version}"
827
		testCompile("io.undertow:undertow-core:${undertowVersion}")
828
		testCompile("org.jboss.xnio:xnio-api:${xnioVersion}")
829 830 831
		testCompile("io.reactivex:rxnetty-http:${rxnettyVersion}") {
			exclude group: 'io.reactivex', module: 'rxjava'
		}
832
		testCompile("com.fasterxml:aalto-xml:1.0.0")
833
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
B
Brian Clozel 已提交
834
		testCompile("com.squareup.okhttp3:mockwebserver:${okhttp3Version}")
835 836
		testRuntime("javax.el:javax.el-api:${elApiVersion}")
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
837 838 839
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
840
		testRuntime("org.jboss.xnio:xnio-nio:${xnioVersion}")
841
		testRuntime("org.jboss.logging:jboss-logging:3.3.1.Final")
842
		testRuntime("org.webjars:underscorejs:1.8.3")
843
		testRuntime("org.jruby:jruby:9.1.8.0")
844
		testRuntime("org.python:jython-standalone:2.5.3")
845
		testRuntime("org.jetbrains.kotlin:kotlin-compiler:${kotlinVersion}")
846
		testCompile("org.jetbrains.kotlin:kotlin-script-runtime:${kotlinVersion}")
847
		testRuntime("org.jetbrains.kotlin:kotlin-script-util:${kotlinVersion}")
848
	}
849 850 851 852 853

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

P
Phillip Webb 已提交
856 857
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
858

859
	dependencies {
860 861 862 863 864 865 866
		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 已提交
867
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
868 869
		optional("org.eclipse.persistence:org.eclipse.persistence.core:${eclipselinkVersion}")
		optional("org.eclipse.persistence:org.eclipse.persistence.jpa:${eclipselinkVersion}") {
870 871
			exclude group: 'org.eclipse.persistence', module: 'javax.persistence'
		}
872
		optional("org.hibernate:hibernate-core:${hibernate5Version}")
873
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
S
Sam Brannen 已提交
874
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
P
Phillip Webb 已提交
875
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
876
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
877
	}
C
Chris Beams 已提交
878 879
}

P
Phillip Webb 已提交
880 881
project("spring-webmvc") {
	description = "Spring Web MVC"
882

883
	dependencies {
884
		compile(project(":spring-aop"))
885 886
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
887
		compile(project(":spring-core"))
888
		compile(files(project(":spring-core").objenesisRepackJar))
889 890
		compile(project(":spring-expression"))
		compile(project(":spring-web"))
891
		provided("javax.servlet:javax.servlet-api:${servletVersion}")
892
		optional(project(":spring-context-support"))  // for FreeMarker support
893
		optional(project(":spring-oxm"))  // for MarshallingView
894
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
895
		optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1")
896
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
897 898
		optional("org.apache.poi:poi:${poiVersion}")
		optional("org.apache.poi:poi-ooxml:${poiVersion}")
899
		optional("org.freemarker:freemarker:${freemarkerVersion}")
900
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
901 902
		optional("com.lowagie:itext:2.1.7")
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
903
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
904 905
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-smile:${jackson2Version}")
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${jackson2Version}")
906
		optional("com.rometools:rome:${romeVersion}")
907
		optional("javax.el:javax.el-api:${elApiVersion}")
908 909
		optional("org.apache.tiles:tiles-api:${tiles3Version}")
		optional("org.apache.tiles:tiles-core:${tiles3Version}") {
910 911
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
912
		optional("org.apache.tiles:tiles-servlet:${tiles3Version}") {
913 914
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
915
		optional("org.apache.tiles:tiles-jsp:${tiles3Version}") {
916 917
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
918
		optional("org.apache.tiles:tiles-el:${tiles3Version}") {
919 920
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
921
		optional("org.apache.tiles:tiles-extras:${tiles3Version}") {
922 923 924
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
			exclude group: "org.springframework", module: "spring-web"
		}
925
		optional('org.webjars:webjars-locator:0.32-1')
926
		optional("org.reactivestreams:reactive-streams")
927
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
928
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
929
			exclude group: "xml-apis", module: "xml-apis"
930 931
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
932 933 934
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
935
		}
B
Brian Clozel 已提交
936
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
937
			exclude group: "javax.servlet", module: "javax.servlet"
938
		}
B
Brian Clozel 已提交
939
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
940
			exclude group: "javax.servlet", module: "javax.servlet"
941
		}
J
Juergen Hoeller 已提交
942
		testCompile("javax.validation:validation-api:${beanvalVersion}")
943
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
944 945 946
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}") {
			exclude group: "commons-logging", module: "commons-logging"
		}
947
		testCompile("commons-fileupload:commons-fileupload:${fileuploadVersion}")
948
		testCompile("commons-io:commons-io:2.5")
949
		testCompile("joda-time:joda-time:${jodaVersion}")
950
		testCompile("org.mozilla:rhino:1.7.7.1")
951 952 953 954
		testCompile("io.projectreactor:reactor-core")
		testCompile("io.reactivex:rxjava:${rxjavaVersion}")
		testCompile("io.reactivex.rxjava2:rxjava:${rxjava2Version}")
		testCompile("io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}")
955
		testRuntime("org.jruby:jruby:9.1.8.0")
956
		testRuntime("org.python:jython-standalone:2.5.3")
957
		testRuntime("org.jetbrains.kotlin:kotlin-compiler:${kotlinVersion}")
958
		testCompile("org.jetbrains.kotlin:kotlin-script-runtime:${kotlinVersion}")
959
		testRuntime("org.jetbrains.kotlin:kotlin-script-util:${kotlinVersion}")
960
		testRuntime("org.webjars:underscorejs:1.8.3")
961
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
962 963 964
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
965 966 967
	}
}

968 969 970 971 972 973 974 975 976
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"))
977 978
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002
		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"
		}
1003
		optional("org.jboss.xnio:xnio-api:${xnioVersion}")
1004 1005 1006
		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}")
1007 1008
		testCompile("io.projectreactor:reactor-core")
		testCompile("io.projectreactor.ipc:reactor-netty")
1009
		testCompile("io.netty:netty-all:${nettyVersion}")
1010
		testRuntime("org.jboss.xnio:xnio-nio:${xnioVersion}")
1011
		testRuntime("org.jboss.logging:jboss-logging:3.3.1.Final")
1012
	}
1013 1014 1015 1016 1017

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

P
Phillip Webb 已提交
1020 1021
project("spring-test") {
	description = "Spring TestContext Framework"
1022

1023
	dependencies {
1024
		compile(project(":spring-core"))
1025 1026 1027 1028 1029 1030 1031
		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"))
1032
		optional(project(":spring-webflux"))
1033
		optional(project(":spring-websocket"))
1034
		optional("junit:junit:${junitVersion}")
1035
		optional("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
1036
		optional("org.testng:testng:${testngVersion}")
1037
		optional("javax.inject:javax.inject:1")
1038 1039
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
1040 1041 1042 1043
		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"
		}
1044
		optional("javax.el:javax.el-api:${elApiVersion}")
1045
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
1046 1047
		optional("javax.activation:activation:${activationApiVersion}")
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
1048
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
S
Sam Brannen 已提交
1049
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
1050
		optional("org.hamcrest:hamcrest-core:${hamcrestVersion}")
1051
		optional("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
1052 1053 1054 1055 1056
		optional("net.sourceforge.htmlunit:htmlunit:2.26") {
			exclude group: "commons-logging", module: "commons-logging"
		}
		optional("org.seleniumhq.selenium:htmlunit-driver:2.26")
		optional("org.seleniumhq.selenium:selenium-java:3.3.1") {
1057 1058
			exclude group: "io.netty", module: "netty"
		}
1059
		optional("org.skyscreamer:jsonassert:1.4.0")
1060
		optional("com.jayway.jsonpath:json-path:2.2.0")
1061 1062
		optional("org.reactivestreams:reactive-streams")
		optional("io.projectreactor:reactor-core")
1063
		optional("io.projectreactor.addons:reactor-test")
1064 1065
		testCompile(project(":spring-context-support"))
		testCompile(project(":spring-oxm"))
1066
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
1067
		testCompile("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
1068
		testCompile("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
1069
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
1070
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
1071 1072
		// Enable use of the JUnitPlatform Runner
		testCompile("org.junit.platform:junit-platform-runner:${junitPlatformVersion}")
1073
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
1074
		testCompile("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
1075
		testCompile("com.rometools:rome:${romeVersion}")
1076 1077
		testCompile("org.apache.tiles:tiles-api:${tiles3Version}")
		testCompile("org.apache.tiles:tiles-core:${tiles3Version}") {
1078 1079
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
1080
		testCompile("org.apache.tiles:tiles-servlet:${tiles3Version}") {
1081 1082
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
1083
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
1084 1085 1086
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}") {
			exclude group: "commons-logging", module: "commons-logging"
		}
1087
		testCompile("javax.cache:cache-api:${cacheApiVersion}")
1088
		testCompile('de.bechte.junit:junit-hierarchicalcontextrunner:4.12.1')
1089
		testCompile('io.projectreactor.ipc:reactor-netty')
1090
		testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")
1091 1092
		// Pull in the latest Launcher API and the Vintage engine so
		// that we can run JUnit 4 tests in IntelliJ IDEA.
1093
		testRuntime("org.junit.platform:junit-platform-launcher:${junitPlatformVersion}")
1094
		testRuntime("org.junit.vintage:junit-vintage-engine:${junitVintageVersion}")
1095
		testRuntime("org.apache.logging.log4j:log4j-jul:${log4jVersion}")  // Java Util Logging for JUnit 5
1096
		testRuntime("org.ehcache:ehcache:${ehcache3Version}")
J
Juergen Hoeller 已提交
1097
		testRuntime("org.terracotta:management-model:2.0.0")
1098 1099
		testRuntime("javax.el:javax.el-api:${elApiVersion}")
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
1100 1101
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
1102
	}
1103 1104

	task testNG(type: Test) {
1105
		description = 'Runs TestNG tests.'
1106
		useTestNG()
1107
		scanForTestClasses = false
1108 1109
		include(["**/testng/**/*Tests.class", "**/testng/**/*Test.class"])
		// Show STD_OUT & STD_ERR of the test JVM(s) on the console:
1110
		// testLogging.showStandardStreams = true
1111
		// forkEvery 1
1112
		reports.junitXml.destination = file("$buildDir/test-results")
1113 1114 1115
	}

	test {
1116
		description = 'Runs JUnit tests.'
1117 1118
		dependsOn testNG
		useJUnit()
1119 1120 1121
		scanForTestClasses = false
		include(['**/*Tests.class', '**/*Test.class', '**/SpringJUnitJupiterTestSuite.class'])
		exclude(['**/testng/**/*.*'])
1122 1123
		// Java Util Logging for JUnit 5.
		// systemProperty('java.util.logging.manager', 'org.apache.logging.log4j.jul.LogManager')
1124
		reports.junitXml.destination = file("$buildDir/test-results")
1125
	}
1126 1127

	task aggregateTestReports(type: TestReport) {
1128
		description = 'Aggregates JUnit and TestNG test reports.'
1129 1130 1131 1132 1133
		destinationDir = test.reports.html.destination
		reportOn test, testNG
	}

	check.dependsOn aggregateTestReports
C
Chris Beams 已提交
1134 1135
}

P
Phillip Webb 已提交
1136 1137 1138
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
1139

1140
	dependencies {
1141
		aspects(project(":spring-orm"))
1142 1143 1144
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
1145
		provided("org.eclipse.persistence:javax.persistence:${jpaVersion}")
1146 1147 1148 1149 1150 1151
		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
1152
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")  // for @javax.transaction.Transactional support
1153
		optional("javax.cache:cache-api:${cacheApiVersion}")
1154
		testCompile(project(":spring-core"))  // for CodeStyleAspect
1155
		testCompile(project(":spring-test"))
1156
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
1157
	}
1158

1159
	eclipse.project {
P
Phillip Webb 已提交
1160
		natures += "org.eclipse.ajdt.ui.ajnature"
1161
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
1162
	}
C
Chris Beams 已提交
1163 1164
}

1165 1166
project("spring-framework-bom") {
	description = "Spring Framework (Bill of Materials)"
1167

1168 1169 1170 1171 1172
	dependencyManagement {
		generatedPomCustomization {
			enabled = false
		}
	}
1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205

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

1206 1207
sonarqube {
	properties {
S
Stephane Nicoll 已提交
1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219
		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"
	}
}

1220
configure(rootProject) {
P
Phillip Webb 已提交
1221
	description = "Spring Framework"
1222

1223
	apply plugin: "groovy"
R
Rob Winch 已提交
1224
	apply plugin: "io.spring.dependency-management"
1225
	// apply plugin: "detect-split-packages"
1226
	apply from: "${gradleScriptDir}/jdiff.gradle"
1227
	apply from: "${gradleScriptDir}/docs.gradle"
1228

R
Rob Winch 已提交
1229 1230 1231 1232 1233 1234 1235 1236 1237 1238
	dependencyManagement {
		imports {
			mavenBom "io.projectreactor:reactor-bom:${reactorVersion}"
		}
		resolutionStrategy {
			cacheChangingModulesFor 0, 'seconds'
		}
		applyMavenExclusions = false
	}

1239 1240 1241 1242 1243
	// 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")
	// }
1244

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

1248
	dependencies {  // for integration tests
1249
		testCompile(project(":spring-aop"))
1250
		testCompile(project(":spring-beans"))
1251
		testCompile(project(":spring-context"))
1252 1253
		testCompile(project(":spring-core"))
		testCompile(project(":spring-expression"))
1254
		testCompile(project(":spring-jdbc"))
1255
		testCompile(project(":spring-orm"))
1256
		testCompile(project(":spring-test"))
1257
		testCompile(project(":spring-tx"))
1258
		testCompile(project(":spring-web"))
1259
		testCompile("javax.servlet:javax.servlet-api:${servletVersion}")
1260
		testCompile("javax.inject:javax.inject:1")
J
Juergen Hoeller 已提交
1261
		testCompile("javax.resource:javax.resource-api:${jcaVersion}")
1262
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
1263
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
P
Phillip Webb 已提交
1264
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
1265 1266 1267 1268 1269 1270 1271 1272 1273
	}

	artifacts {
		archives docsZip
		archives schemaZip
		archives distZip
	}

	task wrapper(type: Wrapper) {
P
Phillip Webb 已提交
1274
		description = "Generates gradlew[.bat] scripts"
S
Sam Brannen 已提交
1275
		gradleVersion = '3.5'
1276 1277

		doLast() {
1278
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1279
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1280
			File wrapperFile = file("gradlew")
1281 1282
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1283
			File wrapperBatFile = file("gradlew.bat")
1284 1285 1286 1287
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1288

1289
}
1290

S
Stephane Nicoll 已提交
1291
configure([project(':spring-build-src'), project(':spring-framework-bom')]) {
1292
	sonarqube {
S
Stephane Nicoll 已提交
1293 1294 1295 1296 1297
		skipProject = true
	}
}

configure(project(':spring-core')) {
1298 1299
	sonarqube {
		properties {
S
Stephane Nicoll 已提交
1300 1301 1302 1303 1304 1305
			property "sonar.exclusions",
					"src/main/java/org/springframework/cglib/**/*,src/main/java/org/springframework/asm/**/*"
		}
	}
}

1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316
/*
 * 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-")) {
1317
			return version.replace('BUILD', qualifier)
1318 1319
		}
	}
1320
	return version
1321
}