build.gradle 51.0 KB
Newer Older
1
buildscript {
2
	ext.kotlinVersion = '1.1.2-eap-73'
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.8'
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.12.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 276
	task sourcesJar(type: Jar, dependsOn: classes) {
		classifier = 'sources'
277
		from sourceSets.main.allSource
278
		// Don't include or exclude anything explicitly by default. See SPR-12085.
279 280 281
	}

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

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

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

295
	apply plugin: "groovy"
296 297 298

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

	configurations.archives.artifacts.clear()
}

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

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

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

	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 已提交
333
					// Repackage net.sf.cglib => org.springframework.cglib
P
Phillip Webb 已提交
334
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
J
Juergen Hoeller 已提交
335
					// As mentioned above, transform cglib"s internal asm dependencies from
336 337
					// 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 已提交
338
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
339 340 341 342 343
				}
			}
		}
	}

344 345 346 347 348 349 350 351 352 353 354 355
	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 已提交
356
					// Repackage org.objenesis => org.springframework.objenesis
357 358 359 360 361 362
					rule(pattern: "org.objenesis.**", result: "org.springframework.objenesis.@1")
				}
			}
		}
	}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

485
	apply plugin: "groovy"
486

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

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
526 527
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
		optional("javax.activation:activation:${activationApiVersion}")
528 529 530
		optional("org.codehaus.castor:castor-xml:1.4.1")  {
			exclude group: 'stax', module: 'stax-api'
			exclude group: "org.springframework", module: "spring-context"
531
			exclude group: "commons-logging", module: "commons-logging"
532 533 534 535 536
		}
		optional("com.thoughtworks.xstream:xstream:${xstreamVersion}") {
			exclude group: 'xpp3', module: 'xpp3_min'
			exclude group: 'xmlpull', module: 'xmlpull'
		}
537
		optional("org.jibx:jibx-run:1.3.1")
538 539
		testCompile(project(":spring-context"))
		testCompile("xpp3:xpp3:1.1.4c")
540
		testCompile("org.codehaus.jettison:jettison:1.3.8") {
541 542
			exclude group: 'stax', module: 'stax-api'
		}
543
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
544 545
        testCompile(files(genCastor.classesDir).builtBy(genCastor))
        testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
546 547 548
		testRuntime("xerces:xercesImpl:2.11.0")  // for Castor
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
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 561
		optional("io.projectreactor:reactor-core")
		optional("io.projectreactor.ipc:reactor-netty")
562
		optional("io.netty:netty-all:${nettyVersion}")
B
Brian Clozel 已提交
563
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
564 565
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
566
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
567
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
568
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
569
		testCompile("javax.inject:javax.inject-tck:1")
570
		testCompile("javax.servlet:javax.servlet-api:${servletVersion}")
J
Juergen Hoeller 已提交
571
		testCompile("javax.validation:validation-api:${beanvalVersion}")
572
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
573 574 575 576 577
		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 已提交
578
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
579
			exclude group: "javax.servlet", module: "javax.servlet-api"
580
		}
581 582
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}")
583
		testCompile("io.netty:netty-all:${nettyVersion}")
584
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
S
Sebastien Deleuze 已提交
585
		testCompile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
586
		testCompile("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}")
587
		testRuntime("javax.activation:activation:${activationApiVersion}")
588 589
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
590
	}
591 592 593 594 595

	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 已提交
596 597
}

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

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

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

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

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

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

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

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

681 682 683 684 685 686 687 688 689 690 691
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 已提交
692 693
project("spring-web") {
	description = "Spring Web"
S
Sebastien Deleuze 已提交
694

695
	apply plugin: "groovy"
696

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

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

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

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

	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 已提交
853 854
}

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

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

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

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

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

	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"])
	}
1017 1018
}

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

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

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

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

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

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

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

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

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

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

1167 1168 1169 1170 1171
	dependencyManagement {
		generatedPomCustomization {
			enabled = false
		}
	}
1172 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

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

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

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

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

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

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

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

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

	artifacts {
		archives docsZip
		archives schemaZip
		archives distZip
	}

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

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

1288
}
1289

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

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

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