build.gradle 50.2 KB
Newer Older
1
buildscript {
J
Juergen Hoeller 已提交
2
	ext.kotlinVersion = '1.1.2'
3
	repositories {
4
		maven { url "https://repo.spring.io/plugins-release" }
5 6
	}
	dependencies {
7
		classpath("io.spring.gradle:dependency-management-plugin:1.0.0.RELEASE")
R
Rob Winch 已提交
8
		classpath("io.spring.gradle:propdeps-plugin:0.0.8")
9
		classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
10
		classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
11 12 13
		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")
14
	}
15 16
}

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

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

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

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

38
	ext.activationApiVersion   = "1.1.1"
39
	ext.annotationApiVersion   = "1.2"
J
Juergen Hoeller 已提交
40
	ext.aspectjVersion         = "1.9.0.BETA-5"
41
	ext.beanvalVersion         = "1.1.0.Final"
42
	ext.cacheApiVersion        = "1.0.0"
43
	ext.caffeineVersion        = "2.4.0"
44
	ext.eclipselinkVersion     = "2.6.4"
45
	ext.ehcacheVersion         = "2.10.4"
46
	ext.ehcachejcacheVersion   = "1.0.1"
47
	ext.ehcache3Version        = "3.3.1"
48
	ext.ejbApiVersion          = "3.2"
J
Juergen Hoeller 已提交
49
	ext.elApiVersion           = "3.0.1-b04"
50
	ext.fileuploadVersion      = "1.3.2"
51
	ext.freemarkerVersion      = "2.3.26-incubating"
52
	ext.groovyVersion          = "2.4.11"
53
	ext.gsonVersion            = "2.8.0"
54
	ext.hamcrestVersion        = "1.3"
55
	ext.hibernate5Version      = "5.2.10.Final"
56
	ext.hibval5Version         = "5.4.1.Final"
57
	ext.hsqldbVersion          = "2.4.0"
58
	ext.httpasyncVersion       = "4.1.3"
59
	ext.httpclientVersion      = "4.5.3"
60
	ext.interceptorApiVersion  = "1.2"
J
Juergen Hoeller 已提交
61
	ext.jackson2Version        = "2.9.0.pr3"
62
	ext.javamailVersion        = "1.6.0-rc1"
63
	ext.jaxbVersion            = "2.2.11"
64
	ext.jaxwsVersion           = "2.2.11"
65
	ext.jcaVersion             = "1.7"
66
	ext.jettyVersion           = "9.4.5.v20170502"
67
	ext.jmsVersion             = "2.0.1"
68
	ext.jodaVersion            = "2.9.9"
69
	ext.jpaVersion             = "2.1.1"
70
	ext.jsfVersion             = "2.2"
71 72 73
	ext.jspVersion             = "2.3.2-b02"
	ext.jtaVersion             = "1.2"
	ext.junitVersion           = "4.12"
74
	ext.junitVintageVersion    = "4.12.0-M4"
S
Sam Brannen 已提交
75 76
	ext.junitJupiterVersion    = '5.0.0-M4'
	ext.junitPlatformVersion   = '1.0.0-M4'
77
	ext.log4jVersion           = '2.8.2'
78 79
	ext.nettyVersion           = "4.1.10.Final"
	ext.niomultipartVersion    = "1.0.2"
80 81
	ext.okhttp3Version         = "3.7.0"
	ext.poiVersion             = "3.16"
82 83
	ext.protobufVersion        = "3.3.0"
	ext.quartzVersion          = "2.3.0"
S
Stephane Nicoll 已提交
84
	ext.reactorVersion         = "Bismuth-M1"
85
	ext.romeVersion            = "1.7.2"
86
	ext.rxjavaVersion          = '1.2.10'
87
	ext.rxjavaAdapterVersion   = '1.2.1'
J
Juergen Hoeller 已提交
88
	ext.rxjava2Version         = '2.1.0'
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.14.Final"
98
	ext.websocketVersion       = "1.1"
99
	ext.woodstoxVersion        = "5.0.3"
100
	ext.xmlunitVersion         = "2.3.0"
101
	ext.xstreamVersion         = "1.4.9"
102

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

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

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

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

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

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

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

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

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

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

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

177
	repositories {
B
Brian Clozel 已提交
178
		maven { url "https://repo.spring.io/libs-release" }
179
		maven { url "https://repo.spring.io/milestone" }
180
	}
C
Chris Beams 已提交
181

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

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

214
configure(subprojects - project(":spring-build-src")) { subproject ->
215
	apply plugin: "merge"
216
	apply from: "${gradleScriptDir}/publish-maven.gradle"
217 218 219 220 221
	apply plugin: "io.spring.dependency-management"

	dependencyManagement {
		imports {
			mavenBom "io.projectreactor:reactor-bom:${reactorVersion}"
222
			mavenBom "io.netty:netty-bom:${nettyVersion}"
223 224 225 226 227 228
		}
		resolutionStrategy {
			cacheChangingModulesFor 0, 'seconds'
		}
		applyMavenExclusions = false
	}
229

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

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

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

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

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

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

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

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

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

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

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

294
	apply plugin: "groovy"
295 296 297

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

	configurations.archives.artifacts.clear()
}

304 305 306 307 308 309 310 311 312
project("spring-jcl") {
	description = "Spring Commons Logging Bridge"

	dependencies {
		optional("org.apache.logging.log4j:log4j-api:${log4jVersion}")
		optional("org.slf4j:slf4j-api:${slf4jVersion}")
	}
}

P
Phillip Webb 已提交
313 314
project("spring-core") {
	description = "Spring Core"
315

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

	configurations {
		jarjar
		cglib
326
		objenesis
327 328 329 330 331 332 333 334 335 336 337 338 339 340
	}

	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 已提交
341
					// Repackage net.sf.cglib => org.springframework.cglib
P
Phillip Webb 已提交
342
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
J
Juergen Hoeller 已提交
343
					// As mentioned above, transform cglib"s internal asm dependencies from
344 345
					// 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 已提交
346
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
347 348 349 350 351
				}
			}
		}
	}

352 353 354 355 356 357 358 359 360 361 362 363
	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 已提交
364
					// Repackage org.objenesis => org.springframework.objenesis
365 366 367 368 369 370
					rule(pattern: "org.objenesis.**", result: "org.springframework.objenesis.@1")
				}
			}
		}
	}

371
	dependencies {
372
		cglib("cglib:cglib:${cglibVersion}@jar")
373
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
374
		jarjar("com.googlecode.jarjar:jarjar:1.3")
375

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

	jar {
J
Juergen Hoeller 已提交
399
		// Inline repackaged cglib classes directly into spring-core jar
400 401
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
402
			include "org/springframework/cglib/**"
403
		}
404 405 406 407 408

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
409
	}
C
Chris Beams 已提交
410 411
}

P
Phillip Webb 已提交
412 413
project("spring-beans") {
	description = "Spring Beans"
414

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

426 427
project("spring-beans-groovy") {
	description "Groovy Bean Definitions"
428

J
Juergen Hoeller 已提交
429
	merge.into = project(":spring-beans")
430
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
431 432 433

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

J
Juergen Hoeller 已提交
437
	// This module's Java and Groovy sources need to be compiled together.
438
	compileJava.enabled = false
J
Juergen Hoeller 已提交
439 440 441
	sourceSets {
		main {
			groovy {
442
				srcDir "src/main/java"
J
Juergen Hoeller 已提交
443 444 445
			}
		}
	}
446 447

	compileGroovy {
448 449
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
450
	}
J
Juergen Hoeller 已提交
451 452
}

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

456
	dependencies {
457
		compile(project(":spring-beans"))
458 459
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
460
		compile(files(project(":spring-core").objenesisRepackJar))
461
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
462
		optional("org.apache.commons:commons-pool2:2.4.2")
463
		optional("com.jamonapi:jamon:2.81")
464
	}
C
Chris Beams 已提交
465 466
}

P
Phillip Webb 已提交
467 468
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
469

470
	dependencies {
471
		compile(project(":spring-core"))
472
	}
C
Chris Beams 已提交
473 474
}

P
Phillip Webb 已提交
475 476
project("spring-instrument") {
	description = "Spring Instrument"
477

478
	jar {
P
Phillip Webb 已提交
479 480
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
481 482
		manifest.attributes["Agent-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
483 484 485
		manifest.attributes["Can-Redefine-Classes"] = "true"
		manifest.attributes["Can-Retransform-Classes"] = "true"
		manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
486
	}
C
Chris Beams 已提交
487 488
}

P
Phillip Webb 已提交
489 490
project("spring-context") {
	description = "Spring Context"
491

492
	apply plugin: "groovy"
493

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

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

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

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

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

	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 已提交
602 603
}

P
Phillip Webb 已提交
604 605
project("spring-tx") {
	description = "Spring Transaction"
606

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

P
Phillip Webb 已提交
623 624
project("spring-jms") {
	description = "Spring JMS"
625

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

P
Phillip Webb 已提交
641 642
project("spring-jdbc") {
	description = "Spring JDBC"
643

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

P
Phillip Webb 已提交
659 660
project("spring-context-support") {
	description = "Spring Context Support"
661

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

686 687 688 689 690 691 692 693 694 695 696
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 已提交
697 698
project("spring-web") {
	description = "Spring Web"
S
Sebastien Deleuze 已提交
699

700
	apply plugin: "groovy"
701

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

	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 已提交
850 851
}

P
Phillip Webb 已提交
852 853
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
854

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

P
Phillip Webb 已提交
876 877
project("spring-webmvc") {
	description = "Spring Web MVC"
878

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

963 964 965 966 967 968 969 970 971
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"))
972 973
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
		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"
		}
		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}")
1001 1002
		testCompile("io.projectreactor:reactor-core")
		testCompile("io.projectreactor.ipc:reactor-netty")
1003
		testCompile("io.netty:netty-all")
1004
	}
1005 1006

	if (JavaVersion.current().java9Compatible) {
1007 1008 1009
		// JAXB requires java.util.logging
		test.jvmArgs(["--add-modules", "java.logging"])
		// ReactorNettyTcpClient's use of Netty requires access to sun.nio.ch.SelectorImpl
1010 1011
		test.jvmArgs(["--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"])
	}
1012 1013
}

P
Phillip Webb 已提交
1014 1015
project("spring-test") {
	description = "Spring TestContext Framework"
1016

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

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

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

	task aggregateTestReports(type: TestReport) {
1122
		description = 'Aggregates JUnit and TestNG test reports.'
1123 1124 1125 1126 1127
		destinationDir = test.reports.html.destination
		reportOn test, testNG
	}

	check.dependsOn aggregateTestReports
C
Chris Beams 已提交
1128 1129
}

P
Phillip Webb 已提交
1130 1131 1132
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
1133

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

1153
	eclipse.project {
P
Phillip Webb 已提交
1154
		natures += "org.eclipse.ajdt.ui.ajnature"
1155
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
1156
	}
C
Chris Beams 已提交
1157 1158
}

1159 1160
project("spring-framework-bom") {
	description = "Spring Framework (Bill of Materials)"
1161

1162 1163 1164 1165 1166
	dependencyManagement {
		generatedPomCustomization {
			enabled = false
		}
	}
1167 1168 1169 1170 1171 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

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

1200 1201
sonarqube {
	properties {
S
Stephane Nicoll 已提交
1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213
		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"
	}
}

1214
configure(rootProject) {
P
Phillip Webb 已提交
1215
	description = "Spring Framework"
1216

1217
	apply plugin: "groovy"
R
Rob Winch 已提交
1218
	apply plugin: "io.spring.dependency-management"
1219
	// apply plugin: "detect-split-packages"
1220
	apply from: "${gradleScriptDir}/jdiff.gradle"
1221
	apply from: "${gradleScriptDir}/docs.gradle"
1222

R
Rob Winch 已提交
1223 1224 1225 1226 1227 1228 1229 1230 1231 1232
	dependencyManagement {
		imports {
			mavenBom "io.projectreactor:reactor-bom:${reactorVersion}"
		}
		resolutionStrategy {
			cacheChangingModulesFor 0, 'seconds'
		}
		applyMavenExclusions = false
	}

1233 1234 1235 1236 1237
	// 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")
	// }
1238

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

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

	artifacts {
		archives docsZip
		archives schemaZip
		archives distZip
	}

	task wrapper(type: Wrapper) {
P
Phillip Webb 已提交
1268
		description = "Generates gradlew[.bat] scripts"
S
Sam Brannen 已提交
1269
		gradleVersion = '3.5'
1270 1271

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

1283
}
1284

S
Stephane Nicoll 已提交
1285
configure([project(':spring-build-src'), project(':spring-framework-bom')]) {
1286
	sonarqube {
S
Stephane Nicoll 已提交
1287 1288 1289 1290 1291
		skipProject = true
	}
}

configure(project(':spring-core')) {
1292 1293
	sonarqube {
		properties {
S
Stephane Nicoll 已提交
1294 1295 1296 1297 1298 1299
			property "sonar.exclusions",
					"src/main/java/org/springframework/cglib/**/*,src/main/java/org/springframework/asm/**/*"
		}
	}
}

1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310
/*
 * 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-")) {
1311
			return version.replace('BUILD', qualifier)
1312 1313
		}
	}
1314
	return version
1315
}